[英]how to add event listener to appened content on javascript
i have created my own jquery because i need only these 4 functions,我创建了自己的 jquery 因为我只需要这 4 个功能,
everything is working well until i click append.一切正常,直到我点击 append。
i tried document.getElementsByTag
because it returns live htmlcollection but didnt work我尝试
document.getElementsByTag
因为它返回实时 htmlcollection 但没有用
function $(s) { var el; if (s instanceof HTMLElement) { el = [s]; } else { el = document.querySelectorAll(s); } const obj = { elm: el, show: function() { var i = obj.elm.length; while (i--) { obj.elm[i].style.display = ""; } }, hide: function() { var i = obj.elm.length; while (i--) { obj.elm[i].style.display = "none"; } }, on: function(ev,cb) { var i = obj.elm.length; while(i--) { obj.elm[i].addEventListener(ev,cb); } }, append: function(cn) { var i = obj.elm.length; while(i--) { obj.elm[i].innerHTML += cn; } } } return obj }
<ul> <li>Click to hide</li> <li>Click to hide</li> <li>Click to hide</li> <li>Click to hide</li> </ul> <button id="sh">Show</button> <button id="ap">Append</button> <script> document.addEventListener("DOMContentLoaded", function() { $("li").on("click", function() { $("li").hide(); }); $("#sh").on("click", function() { $("li").show(); }); $("#ap").on("click", function() { $("ul").append("<li>X<li/>"); }); }); </script>
I would change your code a bit ( innerHTML +=
is a bad practice, it breaks the current listeners).我会稍微更改您的代码(
innerHTML +=
是一种不好的做法,它会破坏当前的侦听器)。
First change your click listener:首先更改您的点击侦听器:
$("#ap").on("click", function() {
const li = document.createElement('li');
li.innerText = 'X';
// add the event listeners to the li element
li.addEventListener(...)
// append it
$("ul").append(li);
});
Now change this obj.elm[i].innerHTML += cn;
现在改变这个
obj.elm[i].innerHTML += cn;
to obj.elm[i].insertAdjacentElement('beforend', cn)
.到
obj.elm[i].insertAdjacentElement('beforend', cn)
。 Notice that in this version, cn is an HTML element and NOT a string, and it's using insertAdjacentElement
instead of innerHTML +=
so you don't lose the previous event listeners.请注意,在此版本中,cn 是一个 HTML 元素而不是字符串,并且它使用
insertAdjacentElement
而不是innerHTML +=
,因此您不会丢失以前的事件侦听器。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.