怎么样$(this).is("[name]")
?
该[attr]
语法是用于与属性的元素的CSS选择attr
,并.is()
检查是否它被称为在元件给定的CSS选择相匹配.
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]
语法是用于与属性的元素的CSS选择attr
,并.is()
检查是否它被称为在元件给定的CSS选择相匹配.
如果您经常检查属性的存在,我建议您创建一个hasAttr
函数,以便在您的问题中假设使用:
$.fn.hasAttr = function(name) { return this.attr(name) !== undefined; }; $(document).ready(function() { if($('.edit').hasAttr('id')) { alert('true'); } else { alert('false'); } });Test field
你太近了,这很疯狂.
if($(this).attr("name"))
没有hasAttr但按名称命中属性只会返回undefined(如果它不存在).
这就是下面的原因.如果从#heading中删除name属性,则会触发第二个警报.
更新:根据评论,如果属性存在,则以下将仅起作用并且如果属性存在则设置为不存在但不为空
Welcome!
晚了,但是......为什么不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); };
我在编写自己的函数的同时做了同样的事情,但我会分享以防万一其他人在这里绊倒.我添加了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"属性存储目标输入字段的id.
我为jquery编写了一个hasAttr()插件,它将完全按照OP的要求完成所有这些操作.更多信息在这里
编辑: 我的插件被删除在2010年的插件.jquery.com数据库删除灾难中.你可以在这里查看一些关于自己添加它的信息,以及为什么没有添加它.