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年。你可以看看这里有一些信息自己添加它,为什么没有被添加。