通过HTML元素循环不使用返回的prevObject

时间:2015-02-01 09:05:20

标签: javascript jquery html loops

我似乎无法想出这个有点令人尴尬的事情!

我试图遍历几组元素,然后在这些元素中我需要能够检查其中是否有其他元素(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(&#39; ul li ul&#39;) - 我将获得一个prevObject,其中我不会#39 ; t知道循环的第二次迭代是什么。

任何帮助都会很棒。

谢谢。

3 个答案:

答案 0 :(得分:1)

jQuery的.has()返回元素的子集而不是布尔值,您只需要更改以下内容:

if ($(this).has('ul li ul'))

if ($(this).has('ul li ul').length)

Working jsFiddle

答案 1 :(得分:1)

$('#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'))
        }
    });

正在使用 Fiddle

大于&gt; 0,是可选的,但我把它放在那里是为了便于阅读。 您为每个列表获取控制台的原因是因为$(selector).has()方法返回一个对象,无论它是否找到某个对象。你正在调整IF(任何东西),并且这将传递为有效,因为显示无结果的对象仍然是一段数据(即在你的情况下为prevObject)。添加长度,如果没有结果,则返回0,在JavaScript中将0视为false。

这应该对你有用,并希望它也清楚为什么会发生这种情况:)

答案 2 :(得分:1)

$(this).find('ul li ul')

是一个jQuery对象,因此您在浏览器控制台中看到的输出似乎就是该对象。

如果你想要一个实际DOM元素的数组,而不是一个包含它们的jQuery对象,你可以使用.get()函数

var elementArray = $(this).find('ul li ul').get();