答案:利用事件冒泡的原理,讓本身的所觸發的事件,讓他的父元素代替執行!node
解析:git
一、那什麼樣的事件能夠用事件委託,什麼樣的事件不能夠用呢?github
二、爲何要用事件委託web
<ul> <li>蘋果</li> <li>香蕉</li> <li>鳳梨</li> </ul> // good document.querySelector('ul').onclick = (event) => { let target = event.target if (target.nodeName === 'LI') { console.log(target.innerHTML) } } // bad document.querySelectorAll('li').forEach((e) => { e.onclick = function() { console.log(this.innerHTML) } })
三、事件冒泡與事件委託的對比性能
四、事件委託怎麼取索引?this
<ul id="ul"> <li>aaaaaaaa</li> <li>事件委託了 點擊當前,如何獲取 這個點擊的下標</li> <li>cccccccc</li> </ul> <script> window.onload = function () { var oUl = document.getElementById("ul"); var aLi = oUl.getElementsByTagName("li"); oUl.onclick = function (ev) { var ev = ev || window.event; var target = ev.target || ev.srcElement; if (target.nodeName.toLowerCase() == "li") { var that = target; var index; for (var i = 0; i < aLi.length; i++) if (aLi[i] === target) index = i; if (index >= 0) alert('個人下標是第' + index + '個'); target.style.background = "red"; } } } </script>
拓展:code
參考索引
參與互動seo