jQuery hasattr检查元素上是否有属性

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

例如,

if ($(this).hasAttr("name")) {// ...}
1043213 次浏览

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

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

没有hasattr,但如果不存在,按名称命中属性将仅返回未定义。

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

更新时间:根据评论,如果属性存在,下面的将只有工作设置为如果属性不存在但为空

<script type="text/javascript">$(document).ready(function(){if ($("#heading").attr("name"))alert('Look, this is showing because it\'s not undefined');elsealert('This would be called if it were undefined or is there but empty');});</script><h1 id="heading" name="bob">Welcome!</h1>
var attr = $(this).attr('name');
// For some browsers, `attr` is undefined; for others,// `attr` is false.  Check for both.if (typeof attr !== 'undefined' && attr !== false) {// ...}

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

最好的方法是使用filter()

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

拥有. hasattr()仍然很好,但因为它不存在,所以有这种方式。

您还可以将它与表单字段上的禁用=“禁用”等属性一起使用,如下所示:

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

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

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

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

我为jQuery编写了一个hasattr()插件,它将非常简单地完成所有这些工作,完全符合OP的要求。更多信息这里

编辑:我的插件在2010年的plugins.jquery.com数据库删除灾难中被删除。您可以在这里中查找有关自己添加它的一些信息,以及为什么没有添加它。

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,因为如果属性不存在,getAt的()将返回null。

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

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

参考这个