首页 文章

jQuery hasAttr检查元素是否有属性[重复]

提问于
浏览
637

可能重复:使用JQuery检查属性是否存在

你如何检查jQuery中的元素是否有属性?与 hasClass 类似,但是 attr

例如,

if ($(this).hasAttr("name")) {
    // ...
}

9 回答

  • 73
    var attr = $(this).attr('name');
    
    // For some browsers, `attr` is undefined; for others,
    // `attr` is false.  Check for both.
    if (typeof attr !== typeof undefined && attr !== false) {
        // ...
    }
    
  • 81

    只是 $(this).is("[name]") 怎么样?

    [attr] 语法是具有属性 attr 的元素的CSS选择器, .is() 检查它被调用的元素是否与给定的CSS选择器匹配 .

  • 580

    如果您经常检查属性的存在,我建议您创建一个 hasAttr 函数,以便在您的问题中假设使用:

    $.fn.hasAttr = function(name) {  
       return this.attr(name) !== undefined;
    };
    
    $(document).ready(function() {
        if($('.edit').hasAttr('id')) {
            alert('true');
        } else {
            alert('false');
        }
    });
    
    <div class="edit" id="div_1">Test field</div>
    
  • 988

    你太近了,这很疯狂 .

    if($(this).attr("name"))
    

    没有hasAttr但按名称命中属性只会返回undefined(如果它不存在) .

    这就是下面的原因 . 如果从#heading中删除name属性,则会触发第二个警报 .

    Update: 根据评论,如果属性存在,下面将 ONLY 工作 AND 设置为如果属性存在但不为空

    <script type="text/javascript">
    $(document).ready(function()
    {
        if ($("#heading").attr("name"))
          alert('Look, this is showing because it\'s not undefined');
        else
          alert('This would be called if it were undefined or is there but empty');
    });
    </script>
    <h1 id="heading" name="bob">Welcome!</h1>
    
  • 5

    晚了,但是......为什么不只是 this.hasAttribute("name")

    参考This

  • 5

    最好的方法是使用 filter()

    $("nav>ul>li>a").filter("[data-page-id]");
    

    拥有.hasAttr()仍然会很好,但因为它不存在就有这种方式 .

  • 15
    Object.prototype.hasAttr = function(attr) {
        if(this.attr) {
            var _attr = this.attr(attr);
        } else {
            var _attr = this.getAttribute(attr);
        }
        return (typeof _attr !== "undefined" && _attr !== false && _attr !== null);      
    };
    

    我在编写自己的函数的同时做了同样的事情,但我会分享以防万一其他人在这里绊倒 . 我添加了null,因为如果该属性不存在,getAttribute()将返回null .

    此方法将允许您检查jQuery对象和常规javascript对象 .

  • 135

    您还可以在表单字段等上使用诸如disabled =“disabled”之类的属性,如下所示:

    $("#change_password").click(function() {
        var target = $(this).attr("rel");
        if($("#" + target).attr("disabled")) {
            $("#" + target).attr("disabled", false);
        } else {
            $("#" + target).attr("disabled", true);
        }
    });
    

    “rel”属性存储目标输入字段的id .

  • 7

    我为jquery编写了一个hasAttr()插件,它将完全按照OP的要求完成所有这些操作 . 更多信息here

    EDIT: 我的插件在2010年的plugins.jquery.com数据库删除灾难中删除了 . 您可以查看here了解自己添加的一些信息,以及为什么没有添加它 .

相关问题