繁体   English   中英

遍历无法返回prevObject的HTML元素

[英]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)

工作jsFiddle

$('#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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM