使用 JQuery 的 .attr() 当 Selector Returns 多个元素时
Using JQuery's .attr() When Selector Returns Multiple elements
我正在尝试从多个字段中的每个字段中提取 2 条数据。所有字段都被赋予了相同的 "name" 以便于引用它们。
<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() 在这里不起作用?
attr 是一个 jquery fn,应该由 jquery 对象调用
这样使用
$('[name=common_name]').attr('data-X')
所以尝试
dataX = $($('[name=common_name]').get(i)).attr('data-X');
.get() returns a dom element reference which does not have the .attr() method, so you can use the .eq() 方法将 return 一个 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')
})
假设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 条数据。所有字段都被赋予了相同的 "name" 以便于引用它们。
<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() 在这里不起作用?
attr 是一个 jquery fn,应该由 jquery 对象调用
这样使用
$('[name=common_name]').attr('data-X')
所以尝试
dataX = $($('[name=common_name]').get(i)).attr('data-X');
.get() returns a dom element reference which does not have the .attr() method, so you can use the .eq() 方法将 return 一个 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')
})
假设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);
});