![](/img/trans.png)
[英]How to check in Javascript if one element is contained within another
[英]How to check if event target is contained within an element?
我正在嘗試應用事件委托,所以我想在 li 元素內單擊時更新文本,但是當我在元素內單擊時,它不會觸發。 我不想將事件偵聽器直接附加到 li,因為列表可以更新並且 li 中可以有任何元素類型。
const menu = document.querySelector('.menu'); const textField = document.querySelector('p'); menu.addEventListener('click', e => { if (e.target.matches('li')) { textField.textContent = e.target.textContent; } });
li { padding: 1em; border: 1px solid red; } a { border: 1px solid blue; }
<div class="menu"> <ul> <li><a>Home</a></li> <li><a>Gallery</a></li> <li><a>About us</a></li> </ul> <p></p> </div>
如果您想要 li 而不是錨點或任何其他子元素,請使用closest
const li = e.target.closest("li");
if (li) { /* do whatever */ }
您可以通過將click
事件偵聽器附加到父列表ul
來利用冒泡效果。
const menu = document.querySelector('.menu'); const ul = menu.querySelector('ul'); const textField = document.querySelector('p'); ul.addEventListener('click', e => { if(e.target.= ul) textField.textContent = e.target;textContent; });
li { padding: 1em; border: 1px solid red; } a { border: 1px solid blue; }
<div class="menu"> <ul> <li><a>Home</a></li> <li><a>Gallery</a></li> <li><a>About us</a></li> </ul> <p></p> </div>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.