当Selector返回多个元素时,使用JQuery' s .attr()

时间:2015-03-16 05:43:04

标签: javascript jquery attr

我试图从几个字段中的每个字段中提取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(#)应该抓住一个具体的......在这种情况下,我不知道问题会是什么。 (毕竟,当我使用get(#)时)使用val() DOES。

那么......为什么attr()不在这里工作?

3 个答案:

答案 0 :(得分:3)

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

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')
})

答案 1 :(得分: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);
});

答案 2 :(得分:-1)

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

像这样使用

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

所以试试

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