当我点击任何DOM元素时,我想检查它的父元素是否包含特定的类。我尝试了这种方式,但没能实现这个目标。有人知道该如何做吗?
document.onclick=function(e){
console.log(e.parentElement('.drop').id);
}
请只使用JavaScript提供解决方案,我不能使用jQuery。
当我点击任何DOM元素时,我想检查它的父元素是否包含特定的类。我尝试了这种方式,但没能实现这个目标。有人知道该如何做吗?
document.onclick=function(e){
console.log(e.parentElement('.drop').id);
}
classList
属性,它具有一个contains()
方法,对您的目的非常有用:document.onclick=function(e){
console.log( e.parentElement.classList.contains( 'drop' ) );
}
如果你的目标是Internet Explorer (IE<10),你可以手动解析类列表并查找其中的“drop”:
document.onclick=function(e){
console.log( e.parentElement.className.split(' ').indexOf('button-panel')!==-1 );
}
split()
函数将className参数解析为多个名称,并返回一个数组。
indexOf()
函数用于在数组中搜索元素,如果找不到,则返回-1。
classList
仅在 IE 版本 10 及以上版本中受支持。https://developer.mozilla.org/zh-CN/docs/DOM/element.classList#Browser_compatibility - sv_inconsole.parentElement
将是未定义的。 - jbabey传递给事件处理程序的e
是事件对象,而不是被单击的元素。尝试获取srcElement
,然后是其父级的className
。此外,由于您无法使用jQuery,因此传递像.drop
这样的选择器将什么也不做,只会导致语法错误。
document.onclick = function(e){
console.log(e.srcElement.parentNode.className);
e.stopPropagation(); // don't bubble
};
now i got the answer
document.onclick=function(e){
if (!e) e = window.event;
curDD = findparentClass(e.target.parentNode,'drop');
console.log(curDD);
}
}
function findparentClass(node, clsName) {
if(node.className != clsName && node.className!=null){
return findparentClass(node.parentNode,clsName);
}else if(node.className!=null){
return true;
}
}
其中 'drop' 是您想要搜索的类...
function findparentClass(node, clsName) {
if (node && !node.className) {
return findparentClass(node.parentNode, clsName);
} else if(node && node.className){
if(!node.classList.contains(clsName)){
return findparentClass(node.parentNode, clsName);
}else {
return true;
}
}
}
document.addEventListener("click", function(e){
console.log(findparentClass(e.target, 'targetClassName'));
})