代码之家  ›  专栏  ›  技术社区  ›  Doug Domeny

是否有jquery选择器来检查标记是否具有任何属性?

  •  7
  • Doug Domeny  · 技术社区  · 16 年前

    在尝试选择具有任何属性的元素时,下面将引发jquery语法错误。

    $("div[*]")
    

    是否有选择器来检查标记是否具有任何属性?

    用jquery 1.3测试

    4 回复  |  直到 16 年前
        1
  •  6
  •   Ariel Popovsky    16 年前

    我不这么认为,但这应该能解决问题。

    $('*').filter(function(){return this.attributes.length;})
    

    相反:

    $('*').filter(function(){return !this.attributes.length;})
    
        2
  •  5
  •   PetersenDidIt    16 年前

    您可以不为任何属性创建自己的选择器:

    $.expr[':'].noAttrs = function( objNode  ){
        if (objNode.attributes.length) return( true );
        return( false );
    }
    
    $("div:noAttrs")
    
        3
  •  1
  •   Doug Domeny    16 年前

    我采纳了ArielPopovsky关于使用过滤器的建议,但是如果我在很多地方需要这个,我会使用Petersendit关于创建客户选择器的建议。

    (重要)区别在于需要检查.specified属性。IE总是返回超过80个属性。

    注:即使这不是100%。有一些特殊的属性,比如input.value,但是由于我使用的是div,所以可以忽略它们。

    $("div").filter(function()
    { 
        for (var i = 0; i < this.attributes.length; i++)
        {
            var attr = this.attributes[i];
            if (attr.specified) 
            {
                return true;
            }
        }
        return false;
    })
    
        4
  •  0
  •   ant    16 年前

    也许吧 if($('.class').attr('*:attr').length > 0)