jQuery的hasAttr检查,看看是否有一个元素的属性

可能重复:
用JQuery检查是否存在一个属性

你如何检查jQuery中的元素是否有属性? 类似于hasClass ,但是attr

例如,

 if ($(this).hasAttr("name")) { // ... } 
 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的元素的CSSselect器, .is()检查它所调用的元素是否与给定的CSSselect器匹配。

如果你会经常检查属性的存在,我会build议创build一个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> 

你太亲近了,太疯狂了。

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

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

这就是为什么下面的作品。 如果您从#heading中删除名称属性,则会触发第二个警报。

更新:根据评论,下面将只会工作,如果该属性是存在的并设置为某些东西,如果该属性是存在,但空

 <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> 

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

参考这个

最好的方法是使用filter()

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

拥有.hasAttr()将会很好,但是因为它不存在,所以有这个方法。

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

我写了一个自己的function来做同样的事情,但是我还是分享了一下。 我加了null,因为如果属性不存在,getAttribute()将返回null。

这个方法将允许你检查jQuery对象和常规的javascript对象。

您也可以在表单字段中使用属性,例如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”属性存储目标input字段的ID。

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

编辑:我的插件被删除的伟大的plugins.jquery.com数据库删除灾难的2010年。你可以看看这里有一些信息自己添加它,为什么没有被添加。