Javascript 检查元素或祖先是否具有类
Hello这段代码告诉我当前元素是否有类Javascript 检查元素或祖先是否具有类,javascript,dom,Javascript,Dom,Hello这段代码告诉我当前元素是否有类 e.srcElement.className.indexOf('thisClass') === 0 如何检查元素或其任何父元素是否拥有该类?您只需遍历DOM即可。要向上移动一个父级,请使用 如果要无限向上移动,则需要使用循环: for(var i = 0; i < nodes.length; i++) { // check if each parentNode has the class } for(变量i=0;i
e.srcElement.className.indexOf('thisClass') === 0
如何检查元素或其任何父元素是否拥有该类?您只需遍历DOM即可。要向上移动一个父级,请使用 如果要无限向上移动,则需要使用循环:
for(var i = 0; i < nodes.length; i++) {
// check if each parentNode has the class
}
for(变量i=0;i
这是一个乏味的过程。这就是为什么像这样的库只用于DOM遍历/操作。可能更容易找到包含该类的所有元素,并检查其中是否有包含当前节点(未测试代码):
函数checkParentClass(e,类名){
var nodesWithClass=document.getElementsByClassName(“className”);
var指数=0;
var=false;
while(索引
使用元素的名称,可以浏览父列表。使用以下功能:
function elementOrAncestorHasClass(element, className) {
if (!element || element.length === 0) {
return false;
}
var parent = element;
do {
if (parent === document) {
break;
}
if (parent.className.indexOf(className) >= 0) {
return true;
}
} while (parent = parent.parentNode);
return false;
}
显示正在运行的函数。我可以提供使用下一种方法的方法:
function hasClass(element, className) {
return !(!className || !element || !element.className
|| !element.className.match(new RegExp('(\\s|^)' + className + '(\\s|$)')));
}
function parentByClass(childElement, className) {
if (!childElement || childElement === document) {
return null;
} else if (hasClass(childElement, className)) {
return childElement;
} else {
return parentByClass(childElement.parentNode, className)
}
}
function hasClassInTree(element, className) {
return hasClass(element, className) || parentByClass(element, className)
}
所以你的情况是
if (hasClassInTree(e.srcElement, 'thisClass')) { ... }
现在人们可以使用广泛支持的JavaScript方法
祖先
元素在哪里?请同时提供HTML..祖先元素不重要,它可能有无限个div围绕着它。我觉得这个问题不完整。一个适当的标记
会让我们对帖子有更多的了解..我需要在hasClass(childElement,className)
检查之前先检查childElement==document
,否则它会在hasClass
中抛出一个错误,因为document.className
未定义。我建议对您的答案进行编辑以解决此问题。谢谢你的功能@谢谢你,你说得对!让我们让它更紧凑、更安全=)
if (hasClassInTree(e.srcElement, 'thisClass')) { ... }
const parentHasClass = element.closest('.thisClass');