【发布时间】:2014-09-30 20:55:19
【问题描述】:
如何检查某个 DOM 元素是否在另一个 DOM 元素树中?
例如,当您单击主页内容而不是菜单时隐藏菜单,您可以:
document.addEventListener(function (e) {
var node = e.target;
do {
if (node.classList.contains('menu-area'))
return;
node = node.parentNode;
} while (node instanceof HTMLElement);
closeMenu();
});
请注意,单击非菜单区域时隐藏菜单的常用解决方案是菜单上的event.stopPropagation() 和非条件document.addEventListener()。
我在node = node.parentNode 和=== 运算符上使用迭代循环制作测试代码:
<style>
div {
margin: 20px;
padding: 5px;
border: 1px green dotted;
}
</style>
<div id="lvl1">
<div id="lvl2">
<div id="lvl3">
Click me
</div>
</div>
</div>
<div id="result"></div>
<script>
var lvl1Node = document.getElementById('lvl1');
document.addEventListener('click', function(e) {
var node = e.target;
do {
if (lvl1Node === node) {
document.getElementById('result').innerHTML = "Event from: " + e.target.id;
return;
}
node = node.parentNode;
} while (node instanceof HTMLElement);
});
</script>
所以只在<div id='lvl1'> 内点击更改<div id="result"> 区域。这是正确的解决方案(根据标准)吗?
那个 jQuery/Backbone/Underscore/Mojo/etc 都得这个?
【问题讨论】:
标签: javascript dom javascript-events specifications