jQuery hasAttr检查元素是否有属性

jQuery hasAttr checking to see if there is an attribute on an element

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
Check existence of an attribute with JQuery

如何检查jquery中的元素是否有属性?与hasClass相似,但与attr相似?

例如,

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


1
2
3
4
5
6
7
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) {
    // ...
}


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

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


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

1
2
3
4
5
6
7
8
9
10
11
12
13
$.fn.hasAttr = function(name) {  
   return this.attr(name) !== undefined;
};

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

Test field


你离得太近了,太疯狂了。

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

没有hasattr,但是如果不存在属性,按名称点击属性将返回undefined。

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

更新:根据注释,以下仅在属性存在且设置为空的情况下有效

1
2
3
4
5
6
7
8
9
10
<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');
});

<h1 id="heading" name="bob">Welcome!


派对迟到了,但是…为什么不只是this.hasAttribute("name")

参考这个


最好的方法是使用filter()

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

拥有.hasattr()仍然是件好事,但由于它不存在,所以存在这种方式。