阿罗哈,
我找到了我的问题的答案,这里。基本上,我想知道标签是否有属性。我不在乎价值是什么,只是如果有一个。
我目前正在使用:
$.fn.hasAttr = function (attr) {
var attribVal = this.attr(attr);
alert(attr+" ["+attribVal+"]");
return (attribVal !== undefined) && (attribVal !== false);
};此功能在Opera或Webkit中不起作用。即使属性不存在,它也返回true。我添加的警告显示,attribVal等于空,不是false,不是未定义的,不是null,而是空的。火狐和IE,这是很好的工作,因为attribVal是未定义。
问题是,如果它在标记上返回true,对于标记上没有属性,我希望它返回true。
编辑:预期的结果。
<tag /> should be hasAttr('placeholder') = false
<tag placeholder /> should be hasAttr('placeholder') = true
<tag placeholder="" /> should be hasAttr('placeholder') = true
<tag placeholder="Hi" /> should be hasAttr('placeholder') = true编辑:当前代码
这在WebKit和FF中工作,而不是在IE或Opera中。
更新之后,我的原始代码可以工作,除非我正在查看占位符属性。在查看占位符属性时,Opera和webkit将返回所有四个选项的true。有关示例,请参见这里。我更新了我的预期结果以使用占位符属性。
发布于 2011-02-16 01:09:24
这应该适用于所有浏览器:
$.fn.hasAttr = function (attr) {
for (var i = 0; i < this[0].attributes.length; i++) {
if (this[0].attributes[i].nodeName == attr) {return true}
}
return false;
};发布于 2011-02-15 20:32:26
您不应该显式地针对undefined进行检查,而应该只检查falsy values。
return !!attribVal;这将返回false的null,undefined,"",NaN,0,当然还有false。
。
更新
您想要的行为应该可以调用Sizzle:
$.fn.hasAttr = function (attr) {
var attribVal = this.attr(attr);
return (typeof attribVal === 'string');
};示例:http://jsfiddle.net/4UJJk/11/
发布于 2011-02-16 01:15:54
一个简单的jQuery-ish解决方案是:
$.fn.hasAttr = function(attr) {
return this.is('[' + attr + ']');
};jsFiddle。我现在还不能访问IE或者Opera来测试这个..。
https://stackoverflow.com/questions/5009101
复制相似问题