【问题标题】:Using JQuery's .attr() When Selector Returns Multiple elements选择器返回多个元素时,使用jQuery的.attr()
【发布时间】:2015-03-16 05:43:04
【问题描述】:

我正在尝试从多个字段中的每个字段中提取 2 条数据。所有字段都被赋予了相同的“名称”,以便轻松引用它们。

 <input type="text" name="common_name" data-X='ABC'>

我提取的第一条数据是它们的值,这似乎确实有效。我的问题是当我尝试使用attr() 时。到那时它就停在水里了。

var length = $('[name=common_name]').size();
for(var i=0; i < length; i++){
    var value = parseInt($('[name=common_name]').get(i).value); //doesn't kill the script            
    var dataX = $('[name=common_name]').get(i).attr('data-X'); //Script is killed here
 }

由于在选择器基于 id 选择元素时,我通常不会遇到使用 attr() 的问题,我认为问题与在这种情况下返回多个元素的事实有关jQuery。我感到困惑的是,我认为get(#) 应该抓住一个特定的……在这种情况下,我看不出问题出在哪里。 (毕竟,当我使用val() 时,使用get(#) 确实有效)。

那么……为什么 attr() 在这里不起作用?

【问题讨论】:

    标签: javascript jquery attr


    【解决方案1】:

    .get()返回一个没有.attr()方法的dom元素引用,所以你可以使用.eq()方法返回一个jQuery对象

    var length = $('[name=common_name]').size();
    for (var i = 0; i < length; i++) {
        var value = parseInt($('[name=common_name]').eq(i).val()); //doesn't kill the script            
        var dataX = $('[name=common_name]').eq(i).attr('data-X'); //Script is killed here
    }
    

    遍历 jQuery 对象集合的正确方法是使用 .each() 方法,该方法将为 jQuery 集合中的每个元素调用回调

    $('[name=common_name]').each(function () {
        var $this = $(this);
        var value = parseInt($this.val()); //or this.value         
        var dataX = $this.attr('data-X'); //or $this.data('X')
    })
    

    【讨论】:

      【解决方案2】:

      假设html是这样的

       <input type="text" name="common_name" data-X='ABC'>
       <input type="text" name="common_name" data-X='DEF'>
       <input type="text" name="common_name" data-X='GHI'>
      

      现在是脚本部分

      $('input[name="common_name"]').each(function() {
           var el = $(this);
           text_val = el.val();
           data = el.attr('data-X');
           console.log(text_val);
           console.log(data);
      });
      

      【讨论】:

        【解决方案3】:

        attr 是一个 jquery fn,应该由 jquery 对象调用

        这样使用

        $('[name=common_name]').attr('data-X')
        

        那就试试吧

        dataX = $($('[name=common_name]').get(i)).attr('data-X');
        

        【讨论】:

        • 只想告诉他 attr() 不是 dom 元素的 fn,换我的答案
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2023-03-20
        • 2021-05-13
        • 1970-01-01
        • 2010-12-17
        • 1970-01-01
        • 2011-12-18
        • 1970-01-01
        相关资源
        最近更新 更多