Javascript 如何使event.target引用div及其所有子级?(当鼠标单击不在div及其子对象上时检测)
如何使event.target不仅适用于给定的div,而且适用于所有的孩子?我能想到的最好办法是: 1) 列出event.target函数中的所有子函数,即:Javascript 如何使event.target引用div及其所有子级?(当鼠标单击不在div及其子对象上时检测),javascript,html,mouseevent,Javascript,Html,Mouseevent,如何使event.target不仅适用于给定的div,而且适用于所有的孩子?我能想到的最好办法是: 1) 列出event.target函数中的所有子函数,即: window.addEventListener('mouseup', function (event) { if(event.target != div && event.target != divChild1 && event.target != divChild2 && event
window.addEventListener('mouseup', function (event) {
if(event.target != div && event.target != divChild1 && event.target != divChild2 && event.target != divChild3 && event.target != divChild4 && event.target != divChild5 ... && event.target != divChildn) {
closeWindow();
} });
或
2) 将所有子类放在一个类中(这似乎是一个非常多的html),然后让event.target引用该类,即:
window.addEventListener('mouseup', function (event) {
if(event.target != classWithAbout50divs) {
closeWindow();
} });
但肯定有一种方法需要更少的代码
请不要用jquery。谢谢如果您只需要直接子级,您可以使用
元素.children
来循环遍历所述div的子级
否则
element.querySelectorAll('*')
应该将所有元素都包含在所述元素中。您可以使用所提供答案的变体来检查event.target
是否是所讨论的div或其任何子级
例如:
函数IsDescendatorSelf(父、子){
让节点=子节点;
while(节点!=null){
如果(节点==父节点){
返回true;
}
node=node.parentNode;
}
返回false;
}
window.addEventListener('mouseup',函数(事件){
const root=document.getElementById('handle');
如果(!IsDescendatorSelf(根,事件目标)){
console.log('Passed!');
}
});代码>
你
不得
通过
我似乎找到了一个我喜欢的解决方案。第一件事是:
event.target != document.getElementsByClassName("myClassName");
如果引用了类,Event.target似乎不起作用。我只有在通过ID引用元素时才能使其工作。即:
event.target != document.getElementById("myDivId");
现在,如果我不想点击一个div和它的所有子对象,而是想让它发生一些事情,而不是写:
window.addEventListener('click', function (event) {
if(event.target != myDivId) {
doSomething();
console.log("something is done");
}
})
我发现这一点很成功:
window.addEventListener('click', function (event) {
if(!myDivId.contains(event.target) {
doSomething();
console.log("something is done");
}
})
有关潜在的支持问题,请参见您能解释一下大局吗?通过实现此解决方案,您试图解决哪个问题?我试图使一个div及其子项在我单击屏幕上的任何位置时消失,只要我不单击实际的div或其子项。对,一种方法是将div放在一个填充透明覆盖div的窗口中,然后简单地检测覆盖上的点击