2 回答
![?](http://img1.sycdn.imooc.com/545868330001e54e02200220-100-100.jpg)
TA贡献1860条经验 获得超8个赞
你的问题是这ins1不是一个元素,而是一个类似数组的元素对象。并且数组(也不是类似数组的对象)不能添加事件侦听器。
您需要做的是查看ins1并向其中的每个元素添加一个事件侦听器;就像是:
function replaceAfter3Clicks(elem, newElem) {
let count = 0;
let callback = function() {
count ++;
if (count === 3) {
sessionStorage.clear(); // Clear all sessionStorage
sessionStorage.setItem('ins', "ins 2"); // First param is the name and the second is the value
sessionStorage.setItem('data-ad-slot', "4092520690");// First param is the name and the second is the value
elem.parentNode.replaceChild(newElem, elem);
}
};
Array.from(ins1).forEach(element => {
element.addEventListener('click', callback);
}
});
![?](http://img1.sycdn.imooc.com/545850a00001fdd002200220-100-100.jpg)
TA贡献1780条经验 获得超4个赞
你有:
const ins1 = document.getElementsByTagName('4092520690');
.getElementsByTagName()返回一个节点列表。.addEventListener()仅适用于节点,而不适用于整个节点列表。另外(仅供参考).getElementsByTagName()就是这样做的,并且4092520690不是有效的标签名称,因此您可能应该重新考虑一下您的 HTML。
使用“vanilla”JavaScript,您必须在每个节点ins1的执行中迭代节点,.addEventListener()或者您可以在这些节点的祖先上设置侦听器并检查event.target以查看实际触发事件的节点是否为一个您关心的,如果是,请采取相应的行动。
但是,由于您无论如何都在使用 JQuery,因此您可以将行更改为:
const ins1 = $("some valid selector");
ins1.on('click', () => { ... });
添加回答
举报