阿罗哈,
我找到了问题here的答案。基本上我想告诉标签是否有属性。我不在乎价值是什么,只要有一个。
我目前正在使用:
$.fn.hasAttr = function (attr) {
var attribVal = this.attr(attr);
alert(attr+" ["+attribVal+"]");
return (attribVal !== undefined) && (attribVal !== false);
};
此功能在Opera或Webkit中不起作用。即使该属性不存在,它也会返回true。我添加的警报显示attribVal
等于空白,不是假,不是未定义,不是空,而是空白。由于attribVal
未定义,因此Firefox和IE可以正常工作。
问题是我希望它为空白属性返回true,如果它在标记上则返回false,而对于标记上没有属性则返回false。
修改 预期结果......
<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
修改:当前代码
This适用于WebKit和FF,而不适用于IE或Opera。
更新完成所有这些后,我的原始代码才有效,除非我正在查看占位符属性。当我查看占位符属性时,Opera和webkit对所有四个选项都返回true。有关示例,请参阅here。我已将我的预期结果更新为使用占位符属性。
答案 0 :(得分:1)
这适用于所有浏览器:
$.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;
};
答案 1 :(得分:0)
您不应该针对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');
};
答案 2 :(得分:0)
一个简单的jQuery-ish解决方案是:
$.fn.hasAttr = function(attr) {
return this.is('[' + attr + ']');
};
jsFiddle。注意我现在还没有访问IE或Opera来测试这个......