ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
[TOC] ## 事件捕获、事件冒泡、事件委托 ~~~ 事件冒泡:就是触发子事件的同时父事件至最上一级的事件也会触发 事件捕获:事件从最上一级标签开始往下查找,直到捕获到事件目标 事件委托:利用事件冒泡处理动态元素事件绑定的方法 $("ul").on("click", selector, function (e) {}) 如果指定selector,则为事件委托;否则,就是常规绑定。 ~~~ ### 1.事件冒泡 ~~~ 绑定事件方法的第三个参数,就是控制事件触发顺序是否为事件捕获。true,事件捕获;false,事件冒泡。默认false,即事件冒泡   由父级事件控制 document.getElementById("parent").addEventListener("click", function (e) { alert("parent事件被触发," + e.target.id); },true) document.getElementById("child").addEventListener("click", function (e) { alert("child事件被触发," + e.target.id) }) ~~~ ### 2.事件委托 > (事件委托就是事件目标自身不处理事件,而是把处理任务委托给其父元素或者祖先元素,甚至根元素(document)。 ) ~~~ $("ul").on("click","li",function(){   $(e.target).css("background-color","#ddd").siblings().css("background-color","white") }) ~~~ > 鼠标点击li上对应的li背景变灰 好处: 1, 提高性能。 2, 新添加的元素还会有之前的事件。 ### 3. 阻止事件冒泡 ~~~ event.stopPropagation() event.preventDefault(); ~~~ ### 4. 事件委托题 > 给table表格中的每个td绑定事件,td数量为1000+,写一下你的思路(事件委托题): ``` <table id="table"> <tr> <td>我们是@IT·平头哥联盟</td><td>,我是首席填坑官</td><td>苏南</td><td>前端开发</td><td>优秀</td> </tr> <tr> <td>我们是@IT·平头哥联盟</td><td>,我是首席填坑官</td><td>苏南</td><td>前端开发</td><td>优秀</td> </tr> <tr> <td>我们是@IT·平头哥联盟</td><td>,我是首席填坑官</td><td>苏南</td><td>前端开发</td><td>优秀</td> </tr> ………… </table> ``` ``` let table =document.querySelector("#table"); table.addEventListener("click",(e)=>{ let {nodeName} = e.target; if(nodeName.toUpperCase() === "TD"){ console.log(e.target);//<td>N</td> } },false); ```