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

时间:2010-10-19 17:20:39

标签: jquery

2 个答案:

答案 0 :(得分:7)

答案 1 :(得分:0)

:has() selector仅选择那些具有与给定选择器匹配的降序元素的元素。在内部,:has is defined as(Sizzle是jQuery默认选择器库):

function(elem, i, match){
    return !!Sizzle( match[3], elem ).length;
}

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

与此相反,has method可以采用选择器或DOM元素,只返回那些不包含任何给定元素的元素。因为在内部,has method is defined为:

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;
            }
        }
    });
}

因此它使用contains method来检查是否包含给定元素以过滤所选元素。请注意,只包含一个给定元素就足够了。

相关问题