<template>
次のタグを使用して、多くの DOM 要素 (それぞれが同じ HTML 構造を持つ) を作成しています。
<template id="weapon-template">
<div class="button">
<div class="button-price" data-price ></div>
<img class="button-image" data-image >
<div class="button-name" data-name ></div>
<div class="button-damage" data-damage></div>
<div class="button-amount" data-amount></div>
</div>
</template>
... そして数行の JavaScript:
var clone;
var template = document.getElementById( "weapon-template" );
template.content.querySelector( "[data-image]" ).src = data.prev;
template.content.querySelector( "[data-price]" ).innerHTML = data.cost + "$";
template.content.querySelector( "[data-name]" ).innerHTML = data.name;
template.content.querySelector( "[data-damage]" ).innerHTML = data.damage;
template.content.querySelector( "[data-amount]" ).innerHTML = 0;
clone = document.importNode( template.content, true )
this.container.appendChild( clone );
複製された要素にいくつかのイベント リスナーを追加したいと考えています。私はインターネットから何も見つけることができず、次のようないくつかのことに疲れました。
template.content.querySelector( "[data-price]" ).addEventListener( "click", action, false );
clone.querySelector( "[data-price]" ).addEventListener( "click", action, false );
...これらのどれも機能しませんでした。私は単に次のようなことをすることができます:
var child = this.container.childNodes[ 0 ];
var target = child.querySelector( "[data-price]" );
target.addEventListener( "click", action, false );
...しかし、うまくいかなかった方法に似た別の簡単な方法があるのではないかと思います。