首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >.has()和:has()之间返回结果的差异

.has()和:has()之间返回结果的差异
EN

Stack Overflow用户
提问于 2010-10-19 17:20:38
回答 2查看 349关注 0票数 5

我有一个粗糙的导航结构,可以概括为:

代码语言:javascript
复制
<ul id="navigation">
    <li>
        A
        <ul>
            <li>
                B
                <ul>
                    <li>C</li>
                </ul>
            </li>
            <li>
                D
                <ul>
                    <li>
                        E
                        <ul>
                            <li>F</li>
                        </ul>
                    </li>
                </ul>
            </li>
        </ul>
    </li>
</ul>

子项被隐藏,直到悬停。我想指出B、D和E有子项目,所以我使用了选择器:

代码语言:javascript
复制
$('#navigation > li li:has(ul)')

它只返回B和D。将其更改为:

代码语言:javascript
复制
$('#navigation > li li').has('ul')

把所有正确的东西都退了,但我不明白为什么。

编辑

:has()似乎不受嵌套(完全)的影响,因为

代码语言:javascript
复制
$('#navigation ul > li:has(ul)')

返回与上面的.has()相同的结果。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-10-19 17:28:30

来自jQuery API文档:

:has选择包含至少一个与指定选择器匹配的元素的元素。 .has()将匹配元素的集合缩减为具有与选择器或DOM元素匹配的后代的元素集。

这里有一个相关的问题:jQuery:.has()和:has()之间的细微区别,这似乎指向了两者之间的区别。

但是,:has似乎不以嵌套的方式查看匹配,而.has()则以嵌套的方式查看匹配,因为它返回匹配的子集,因为jQuery对象能够匹配所有的后代,甚至嵌套的后代,就像常规的jQuery选择器一样。

票数 7
EN

Stack Overflow用户

发布于 2010-10-19 20:59:31

选择器只选择那些具有由给定选择器匹配的降序元素的元素。在内部,被定义 as (口吻是jQuery默认选择器库):

代码语言:javascript
复制
function(elem, i, match){
    return !!Sizzle( match[3], elem ).length;
}

这几乎等同于测试每个选定元素的jQuery("selector", elem).lengthjQuery(elem).find("selector").length,以过滤那些没有这样后代的元素。

与此相反,方法可以接受选择器或DOM元素,并且只返回那些不包含任何给定元素的元素。因为在内部,方法被定义为是:

代码语言:javascript
复制
function( target ) {
    var targets = jQuery( target );
    return this.filter(function() {
        for ( var i = 0, l = targets.length; i < l; i++ ) {
            if ( jQuery.contains( this, targets[i] ) ) {
                return true;
            }
        }
    });
}

因此,它使用方法来检查是否包含给定的元素来筛选选定的元素。注意,只包含一个给定的元素就足够了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3970932

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档