Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/452.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 遍历DOM树并检查是否有父类_Javascript_Jquery_Dom_Attributes_Traversal - Fatal编程技术网

Javascript 遍历DOM树并检查是否有父类

Javascript 遍历DOM树并检查是否有父类,javascript,jquery,dom,attributes,traversal,Javascript,Jquery,Dom,Attributes,Traversal,我有一个HTMLDOM对象,我选择了属性为:data-reveal的所有元素 var revealList = doc.querySelectorAll('[data-reveal]'); 我希望遍历这些元素,并检查是否存在具有类注释的父元素。只有当全班同学都不在的时候,我才想做点什么 我使用了其他帖子中建议的最接近的方法,但代码没有返回任何内容 for (var i = 0; i < revealList.length; i++) { if (revealList[i].close

我有一个HTMLDOM对象,我选择了属性为:data-reveal的所有元素

var revealList = doc.querySelectorAll('[data-reveal]');
我希望遍历这些元素,并检查是否存在具有类注释的父元素。只有当全班同学都不在的时候,我才想做点什么

我使用了其他帖子中建议的最接近的方法,但代码没有返回任何内容

for (var i = 0; i < revealList.length; i++) {
  if (revealList[i].closest('[data-conceal]').length = 0) {
    // do something
  }
};
for(变量i=0;i
这是一个最小的HTML示例

<div class="parent">
  <div class="note">
    <img data-reveal="2" href="">
    <img data-reveal="3" href="">
    <img data-reveal="4" href="">
  </div>
  <img data-reveal="5" href="">
  <img data-reveal="6" href="">
</div>

可能是我在if子句中选择对象时出错了吧?

请注意,原生JS(非jQuery)是实验性的,并非所有浏览器都支持(目前)

在代码中,您应该查找最接近的
。注意
。因此,与此相反:

revealList[i].closest('[data-conceal]')
这样做:

revealList[i].closest('.note')
与jQuery
.nexist()
不同,本机最接近者在找不到任何内容时返回
null
,尝试查找
null
的长度时会抛出错误。在尝试使用结果之前检查null

一个有效的例子:

var-revealList=document.querySelectorAll(“[data-reveal]”);
var票据;
对于(变量i=0;i

既然您使用jquery作为标记,这是一个公平的游戏,:D我可能会这样做

$('img').filter('[data-reveal]').each(function(){
var$this=$(this);
if($this.closest('[data-hidden]')。长度<1){
console.log(this);
}
});


旁注,=0是一个赋值。另外,您应该避免纯粹的属性查找。它们的速度可能非常慢,因为它们必须检查作用域中可用的每个dom元素,以查看它们是否匹配。尝试改用类或id,或者在使用属性选择器之前选择元素的子集。应该注意的是,并非所有浏览器都支持该方法(目前)。我迟钝地注意到了:)谢谢,关于最接近的返回null和not true/false的提示是关键。