首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Webkit和Opera中的jquery hasAttr

Webkit和Opera中的jquery hasAttr
EN

Stack Overflow用户
提问于 2011-02-15 20:25:29
回答 3查看 1.1K关注 0票数 1

阿罗哈,

我找到了我的问题的答案,这里。基本上,我想知道标签是否有属性。我不在乎价值是什么,只是如果有一个。

我目前正在使用:

代码语言:javascript
复制
$.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。

编辑:预期的结果。

代码语言:javascript
复制
<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。有关示例,请参见这里。我更新了我的预期结果以使用占位符属性。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-02-16 01:09:24

这应该适用于所有浏览器:

代码语言:javascript
复制
 $.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
EN

Stack Overflow用户

发布于 2011-02-15 20:32:26

您不应该显式地针对undefined进行检查,而应该只检查falsy values

代码语言:javascript
复制
return !!attribVal;

这将返回falsenullundefined""NaN0,当然还有false

更新

您想要的行为应该可以调用Sizzle:

代码语言:javascript
复制
$.fn.hasAttr = function (attr) {
    var attribVal = this.attr(attr);
    return (typeof attribVal === 'string');
};

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

票数 0
EN

Stack Overflow用户

发布于 2011-02-16 01:15:54

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

代码语言:javascript
复制
$.fn.hasAttr = function(attr) {
    return this.is('[' + attr + ']');
};

jsFiddle。我现在还不能访问IE或者Opera来测试这个..。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5009101

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档