我有以下的html:改變事件目標
<div id="div1">
<div id="div2">
</div>
</div>
JS:
document.addEventListener('mousedown', function(e){
console.log(e.target);
});
如果鼠標點擊DIV2,然後e.target是DIV2。在這種情況下,我希望目標是div1。可能嗎?
我有以下的html:改變事件目標
<div id="div1">
<div id="div2">
</div>
</div>
JS:
document.addEventListener('mousedown', function(e){
console.log(e.target);
});
如果鼠標點擊DIV2,然後e.target是DIV2。在這種情況下,我希望目標是div1。可能嗎?
最簡單的方法可能是向上走DOM樹,直到找到所需的元素。
document.addEventListener('mousedown', function(e) {
// start with the element that was clicked.
var parent = e.target;
// loop while a parent exists, and it's not yet what we are looking for.
while (parent && parent.id !== 'div1') {
// We didn't find anything yet, so snag the next parent.
parent = parent.parentElement;
}
// When the loop exits, we either found the element we want,
// or we ran out of parents.
console.log(parent);
});
感謝Alex,您的回答非常有用 – karaxuna
在DOM中,您可以指定附加的事件監聽到的元素:
var div1 = document.getElementById('div1');
div1.addEventListener('mousedown',function(e){
console.log(e.target);
});
不錯的決定,但我有多個div1像div1,這在我的情況是沒有用的。非常感謝 – karaxuna
但是,如果需要「現場」風格的活動代表團,這是行不通的。如果您想綁定一個處理程序,然後將十幾個'#div1'添加到頁面,則無法處理點擊。 –
是的。使用jQuery等支持庫也更容易。 –
我不想使用jQuery – karaxuna
您的最終目標是什麼?你需要觸發'div1'的事件還是以某種方式修改'div1'? –