在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;

这将返回falsenullundefined""NaN0 ,当然是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

上一篇: jquery hasAttr in Webkit and Opera

下一篇: Android Timer stops after 0,2