jQuery hasAttr检查元素是否有属性

时间:2009-08-23 08:38:53

标签: jquery

  

可能重复:
  Check existence of an attribute with JQuery

如何检查jQuery中的元素是否存在属性?与hasClass类似,但与attr相似?

例如,

if ($(this).hasAttr("name")) {
    // ...
}

9 个答案:

答案 0 :(得分:1005)

var attr = $(this).attr('name');

// For some browsers, `attr` is undefined; for others,
// `attr` is false.  Check for both.
if (typeof attr !== typeof undefined && attr !== false) {
    // ...
}

答案 1 :(得分:586)

$(this).is("[name]")怎么样?

[attr]语法是具有属性attr的元素的CSS选择器,.is()检查它被调用的元素是否与给定的CSS选择器匹配。

答案 2 :(得分:139)

如果您经常检查属性的存在,我建议您创建一个hasAttr函数,以便在您的问题中假设使用:

$.fn.hasAttr = function(name) {  
   return this.attr(name) !== undefined;
};

$(document).ready(function() {
    if($('.edit').hasAttr('id')) {
        alert('true');
    } else {
        alert('false');
    }
});

<div class="edit" id="div_1">Test field</div>

答案 3 :(得分:81)

你太近了,这很疯狂。

if($(this).attr("name"))

没有hasAttr但按名称命中属性只会返回undefined(如果不存在)。

这就是下面的原因。如果从#heading中删除name属性,则会触发第二个警报。

更新:根据评论,如果属性存在, ONLY 下面 AND 设置为不属于该属性是空的

<script type="text/javascript">
$(document).ready(function()
{
    if ($("#heading").attr("name"))
      alert('Look, this is showing because it\'s not undefined');
    else
      alert('This would be called if it were undefined or is there but empty');
});
</script>
<h1 id="heading" name="bob">Welcome!</h1>

答案 4 :(得分:74)

晚会,但......为什么不只是this.hasAttribute("name")

参考This

答案 5 :(得分:15)

执行此操作的最佳方式是使用filter()

$("nav>ul>li>a").filter("[data-page-id]");

拥有.hasAttr()仍然会很好,但因为它不存在就有这种方式。

答案 6 :(得分:7)

Object.prototype.hasAttr = function(attr) {
    if(this.attr) {
        var _attr = this.attr(attr);
    } else {
        var _attr = this.getAttribute(attr);
    }
    return (typeof _attr !== "undefined" && _attr !== false && _attr !== null);      
};

我在编写自己的功能的同时做了同样的事情......但我会分享以防其他人在这里绊倒。 我添加了null,因为如果该属性不存在,getAttribute()将返回null。

此方法允许您检查jQuery对象和常规javascript对象。

答案 7 :(得分:5)

您也可以在表单字段等上使用诸如disabled =“disabled”之类的属性,如下所示:

$("#change_password").click(function() {
    var target = $(this).attr("rel");
    if($("#" + target).attr("disabled")) {
        $("#" + target).attr("disabled", false);
    } else {
        $("#" + target).attr("disabled", true);
    }
});

“rel”属性存储目标输入字段的id。

答案 8 :(得分:5)

我为jquery编写了一个hasAttr()插件,它将完全按照OP的要求完成所有这些操作。更多信息here

修改 我的插件在2010年的plugins.jquery.com数据库删除灾难中删除了。您可以查看here以获取有关自己添加它的一些信息,以及为什么没有添加它。