日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

让人省心的事件委托

發布時間:2025/3/8 编程问答 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 让人省心的事件委托 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

事件委托:利用冒泡的原理把實踐添加到父元素級別上,觸發執行效果。

時間委托優點:
? ? ? 1.提高性能,不用for循環遍歷所有li,節省性能。
? ? ? 2.新添加的元素還會有原來之前的事件。


先看時間委托提高的性能吧,一個常見的效果,鼠標經過<li>列表背景變紅,鼠標移走取消背景色。下面代碼是沒使用時間委托:

<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title>testcss</title> <style></style> <script type="text/javascript"> window.οnlοad=function(){var oul=document.getElementsByTagName('ul')[0];var oli=oul.getElementsByTagName('li');for(var i=0;i<oli.length;i++){oli[i].οnmοuseοver=function(){this.style.background='red';};oli[i].οnmοuseοut=function(){this.style.background='';};}} </script> </head> <body><input type='button' value='添加' id='input1'/><ul><li>demo</li><li>demo</li><li>demo</li><li>demo</li><li>demo</li></ul> </body> </html>

很顯然那個for循環就是性能的主要浪費者,就這5個<li>標簽還好,倘若有成千上百個呢?使用時間委托就不用考慮這些了:

oul.οnmοuseοver=function(ev){var ev=ev||window.event; //ev.target代表事件源,事件發生在誰身上誰就是事件源,ev.srcElement是兼容IEvar target=ev.target||ev.srcElement;<span style="white-space:pre"> </span>//if(target.is("li")) //判斷是否為li標簽if(target.nodeName.toLowerCase()=='li')//判斷事件源是否為<li>,目的是為排除<ul>,防止鼠標經過“大的”<ul>時發生變色。{target.style.background='red';}}oul.οnmοuseοut=function(ev){var ev=ev||window.event;var target=ev.target||ev.srcElement;if(target.nodeName.toLowerCase()=='li'){target.style.background='';}}
這樣就不用使用for循環遍歷了。


第二個優點:新添加的元素還會有原來之前的事件。也就是說用for循環的方法只能對現有的標簽實現效果,對于后來新添加的標簽就不能為例了,而用時間委托,只要符合之前設定的標簽,那么新添加的標簽生來就有之前定義的事件效果。下面在網頁中添加一按鈕,點擊按鈕添加一些新的<li>標簽:

<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title>testcss</title> <style></style> <script type="text/javascript"> window.οnlοad=function(){var oul=document.getElementsByTagName('ul')[0];var oli=oul.getElementsByTagName('li');var oinput=document.getElementById('input1');oinput.οnclick=function(){ //點擊按鈕插入新<li>標簽var oli=document.createElement('li');oli.innerHTML='我是新標簽'; //注意:此句代碼應寫在appendChild()前面,能節省性能oul.appendChild(oli);};oul.οnmοuseοver=function(ev){var ev=ev||window.event;//ev.target代表事件源,事件發生在誰身上誰就是事件源,ev.srcElement是兼容IEvar target=ev.target||ev.srcElement;if(target.nodeName.toLowerCase()=='li'){target.style.background='red';}}oul.οnmοuseοut=function(ev){var ev=ev||window.event;var target=ev.target||ev.srcElement;if(target.nodeName.toLowerCase()=='li'){target.style.background='';}}} </script> </head> <body><input type='button' value='添加' id='input1'/><ul><li>11</li><li>22</li><li>33</li><li>44</li><li>55</li></ul> </body> </html>以上代碼運行效果如下圖所示,新插入的標簽依然與生俱來之前的事件:














轉載于:https://www.cnblogs.com/chayangge/p/4288692.html

總結

以上是生活随笔為你收集整理的让人省心的事件委托的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。