[英]Looping through HTML elements not working with prevObject being returned
我似乎无法弄清楚这有点尴尬!
我试图遍历几组元素,然后在这些元素中,我需要能够检查其中是否还有另一个元素(ul li ul)
<nav id="hamburger-nav" style="z-index: 100; opacity: 1;">
<ul>
<div class="cell_3 first_cel">
<ul class="r-list">
<li>
<h1>
<span class="collapse resp-toogle"><i class="fa fa-caret-right fa-lg"></i></span>
<a class="category cars_1" href="#">Cars</a> <span>(4)</span>
</h1>
<ul>
<li>
<a class="category sub-category slow-ones" href="#">Slow ones</a> <span>(0)</span>
</li>
<li>
<a class="category sub-category fast-ones" href="#">fast ones</a> <span>(4)</span>
</li>
</ul>
</li>
</ul>
</div>
<div class="cell_3">
<ul class="r-list">
<li>
<h1>
<a class="category trucks" href="#">Trucks</a> <span>(0)</span>
</h1>
</li>
</ul>
</div>
</ul>
</nav>
JS如下:
$('#hamburger-nav ul div.cell_3').each(function(index) {
if ($(this).has('ul li ul')) {
console.log('found one');
}
});
我将获得三个控制台日志,如果要注销$(this).find('ul li ul')-我将获得一个prevObject,其中我不知道第二次迭代是什么循环。
任何帮助都将是惊人的。
谢谢。
jQuery的.has()
返回的元素子集不是布尔值,您只需要更改以下内容:
if ($(this).has('ul li ul'))
至
if ($(this).has('ul li ul').length)
$('#hamburger-nav ul div.cell_3').each(function(index) {
if ($(this).has('ul li ul').length > 0) {
console.log('found one');
console.log($(this).has('ul li ul'))
}
});
工作小提琴
大于> 0是可选的,但出于可读性考虑,将其放在此处。 之所以要为每个列表获取控制台,是因为$(selector).has()方法返回一个对象,而不管它是否找到东西。 您正在对IF(任何东西)进行条件处理,并且该条件将通过,因为没有结果的对象仍然是一条数据(在您的情况下为prevObject)。 添加长度,如果没有结果,则返回0,在JavaScript中将0视为false。
这应该为您工作,并希望也清楚为什么会发生这种情况:)
$(this).find('ul li ul')
是jQuery对象,因此您在浏览器控制台中看到的输出似乎就是该对象。
如果您想要一个实际DOM元素的数组,而不是包含它们的jQuery对象,则可以使用.get()函数
var elementArray = $(this).find('ul li ul').get();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.