e.target與事件委托簡例(原生和jQuery的區別)


target定義(英譯:目標,目的):

    target 事件屬性可返回事件的目標節點(觸發該事件的節點),如生成事件的元素、文檔或窗口。

語法:

    event.target

    event.target.nodeName    //獲取事件觸發元素標簽name(li,p...)

    event.target.id       //獲取事件觸發元素id

    event.target.className  //獲取事件觸發元素classname

    event.target.innerHTML  //獲取事件觸發元素的內容(li)

    等。。。

jquery:this 與 e.target區別

    this會冒泡。e.target不冒泡就是指向事件觸發的dom。(這里說的this會冒泡,就是指的是會將目標函數點擊的事件不自身處理,將事件委托到他的父元素節點上。例如下面的例子,e.target指的是目標函數)

HTML部分
<ul>
<li><b>Click me!</b></li>
<li>You can also <b>Click me!</b></li>
</ul>
JS部分
$('li').click(function(e){ //點擊的是<b>標簽的時候
console.log($(e.target)); // 返回值指的是<b>
console.log($(this)); //返回值值的是<li>
})

事件委托:原生js

    事件委托就是事件目標自身不處理事件,而是把處理任務委托給其父元素或者祖先元素,甚至根元素(document)。

    使用事件委托時,如果目標元素上的其他事件處理程序使用.stopPropagation()阻止了事件傳播,那么事件委托就會失效。

事件委托簡單例子:

    給ul添加監聽click事件,利用冒泡機制具體捕獲是ul下的哪一個li觸發的click事件。、

HTML部分

<ul id="ul">
<li id="li-1">1</li>
<li id="li-2">2</li>
<li id="li-3">3</li>
<li id="li-4">4</li>
<li id="li-5">5</li>
</ul>


JS部分

// 給ul添加監聽器
document.getElementById("ul").addEventListener("click",function(e) {
// e.target是被點擊的元素!
// 篩選觸發事件的子元素如果是li執行的事件
if(e.target && e.target.nodeName == "LI") {
// 獲取到具體事件觸發的li,輸出其id
console.log("List item ",e.target.id.replace("post-")," was clicked!");
}
});

下面的是一個原生js寫的tab切換功能。

HTML部分

原生JS部分。

jQuery(1.7版本起,on()代替live(),bind(),delegate()方法)的on()方法,也是事件委托

  on() 方法在被選元素及子元素上添加一個或多個事件處理程序。

  使用 on() 方法添加的事件處理程序適用於當前及未來的元素(比如由腳本創建的新元素)。

  如需移除事件處理程序,請使用 off()方法。如需添加只運行一次的事件然后移除,請使用 one() 方法

如有錯誤,還請指出以便改正。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM