Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 检查元素或祖先是否具有类_Javascript_Dom - Fatal编程技术网

Javascript 检查元素或祖先是否具有类

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

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

这是一个乏味的过程。这就是为什么像这样的库只用于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');