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() 方法
如有錯誤,還請指出以便改正。