jquery在Webkit和Opera中有hasAttr

时间:2011-02-15 20:25:29

标签: jquery attributes

阿罗哈,

我找到了问题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。我已将我的预期结果更新为使用占位符属性。

3 个答案:

答案 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;

这将为falsenullundefined""NaN以及0返回false

Read more about !!.

<强>更新

你应该可以调用Sizzle:

$.fn.hasAttr = function (attr) {
    var attribVal = this.attr(attr);
    return (typeof attribVal === 'string');
};

示例http://jsfiddle.net/4UJJk/11/

答案 2 :(得分:0)

一个简单的jQuery-ish解决方案是:

$.fn.hasAttr = function(attr) {
    return this.is('[' + attr + ']');
};

jsFiddle。注意我现在还没有访问IE或Opera来测试这个......