如何向所有克隆元素添加eventlistener?

时间:2018-04-02 21:55:52

标签: javascript json foreach clone addeventlistener

我有这个模板:

<template id="a">
   <div class="b">
        <h1 class="placeholder1"></h1>
        <div class="info hide">
            <p class="p1"></p>
        </div>
    </div>

我正在克隆它:

fetch("json/countries.json").then(res => res.json()).then(list => show(list));
function show(list) {
    list.forEach(function (list) {
        const clone = template.cloneNode(true);
        clone.querySelector(".placeholder1").textContent = list.country;
})}

我正在尝试为每个克隆对象添加一个事件监听器,但结果是它只将它添加到第一个克隆元素,而不是其余元素。

clone.querySelector(".placeholder1").addEventListener('click', fx_button1);
function fx_button1(){
    document.querySelector(".info").classList.toggle("hide");
}

1 个答案:

答案 0 :(得分:0)

querySelector MDN仅选择从给定选择器中找到的第一个匹配项。您需要使用querySelectorAll MDN,然后迭代结果。

var cloneSet = clone.querySelectorAll(".placeholder1");
for(var i = 0; i < cloneSet.length; i++){
    cloneSet[i].addEventListener('click', fx_button1);
}