在Webkit和Opera中jquery hasAttr
阿罗哈,
我在这里找到了我的问题的答案。 基本上我正在寻找告诉如果一个标签有一个属性。 我不在乎价值是什么,只要有一个。
我目前正在使用:
$.fn.hasAttr = function (attr) {
var attribVal = this.attr(attr);
alert(attr+" ["+attribVal+"]");
return (attribVal !== undefined) && (attribVal !== false);
};
此功能在Opera或Webkit中不起作用。 即使该属性不存在,它也会返回true。 我添加的警报显示attribVal
等于空白,而不是false,不是undefined,不是null,而是空白。 Firefox和IE这个工作正常,因为attribVal
是未定义的。
问题是我希望它返回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。 看到这里的例子。 我更新了我的预期结果以使用占位符属性。
这应该适用于所有浏览器:
$.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;
};
一个简单的jQuery-ish解决方案将是:
$.fn.hasAttr = function(attr) {
return this.is('[' + attr + ']');
};
的jsfiddle。 NB我现在还没有访问IE或Opera来测试这个...
你不应该明确地检查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/
链接地址: http://www.djcxy.com/p/13009.html