jQuery检查元素是否包含任何属性

时间:2010-02-10 20:21:59

标签: jquery attributes

我可以检查元素是否具有以下特定属性:

if ($('#A').attr('myattr') !== undefined) {
    // attribute exists
} else {
    // attribute does not exist
}

如何检查元素是否具有任何属性?

谢谢

7 个答案:

答案 0 :(得分:9)

如果您想查看元素是否具有特定属性,请执行以下操作:

if ($('#something').is('[attribute]')) {
  // ...
}

答案 1 :(得分:6)

这是一个函数,用于确定与选择器匹配的任何元素是否至少具有一个属性:

function hasOneOrMoreAttributes(selector) {
    var hasAttribute = false;
    $(selector).each(function(index, element) {
        if (element.attributes.length > 0) {
            hasAttribute = true;
            return false; // breaks out of the each once we find an attribute
        }
    });
    return hasAttribute;
}

用法:

if (hasOneOrMoreAttributes('.someClass')) {
    // Do something
}

如果您想对具有至少一个属性的选定元素进行操作,则更容易 - 您创建自定义过滤器:

// Works on the latest versions of Firefox, IE, Safari, and Chrome
// But not IE 6 (for reasons I don't understand)
jQuery.expr[':'].hasAttributes = function(elem) {
    return elem.attributes.length;
};

您可以这样使用:

$(document).ready(function(){
    $('li:hasAttributes').addClass('superImportant');
}

答案 2 :(得分:4)

$("selector").get(0).hasAttributes("attributes");

答案 3 :(得分:2)

答案 4 :(得分:2)

不是一个完整的jQuery代码,但它可以工作

$("a").click(
function () {
    if($("a").get(0).attributes > 0)
        alert("it has attributes");
})

答案 5 :(得分:1)

我不确定你是否想要返回包含该属性的元素,但如果你是,我找到了最简单的方法:

$('selector[attribute]')

这将返回jquery对象以包含包含该属性的所有元素,而不管其值如何。例如。

$(':text[maxlength]').addClass('has_max_length');

这将为所有带有maxlength属性的文本输入提供一个'has_max_length'类。

答案 6 :(得分:0)

这是一个解决方案,我发现更可靠的是知道某个元素是否定义了适用于IE,Chrome和Firefox的属性:

$(selector).each(function(index, element) {
    if (element.hasAttributes) { // Some browser supports this method
        if (element.hasAttributes()) {
            return true;
        }
     } else {
           // IE counts many attributes - even if not set explicitly
           var attrs = element.attributes;
           for (var i = 0; i < attrs.length; i++) {
                if (attrs[i].specified) {
                    return true;
                }
            }
     }
     return false;
});

问题是即使没有明确设置IE,IE也会返回高属性计数。例如,对于简单的&lt; p>标签,IE告诉我它有111个属性。通过该解决方案,我能够过滤掉那些我不感兴趣的属性。

这个解决方案来自:http://help.dottoro.com/ljevmnkf.php(只是在页面被移除时复制它)。