为什么这会在每次迭代时给出第一个id?或者更好的是,我如何获得每个id?
$('#foo').on('click', function () {
var rows = $('#mytable tbody tr.selected');
for (var i = 0; rows[i]; i++) {
console.log('rows.attr("id")' + rows.attr('id'));
}
});
这次打印“17”两次,选择2行时。我可以看到第二行是“18”,所以出了点问题。
答案 0 :(得分:4)
我建议您使用.each()
在当前DOM元素的上下文中触发回调,因此关键字
this
引用该元素。
var rows = $('#mytable tbody tr.selected');
rows.each(function(){
console.log(this.id); //Here this refers current row
})
OR
var rows = $('#mytable tbody tr.selected');
//Here you need to add break condition
for (var i = 0; i < rows.length; i++) {
console.log('rows.attr("id")' + rows[i].id); //access row using index
}
答案 1 :(得分:4)
您可以使用jquery map并获取数组中的值:
$('#foo').on('click', function() {
var rows = $('#mytable tbody tr.selected');
var ids = rows.map(function() {
return this.id;
}).get();
console.log(ids);//outputs ['row1', 'row2', 'row3']
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<table id="mytable">
<tr id="row1" class="selected">
<td></td>
</tr>
<tr id="row2" class="selected">
<td></td>
</tr>
<tr id="row3" class="selected">
<td></td>
</tr>
</table>
<input type="button" id="foo" value="Get all row id" />
<强>参考文献:强>
答案 2 :(得分:2)
希望这项工作!
$('#foo').on('click', function () {
var rows = $('#mytable tbody tr.selected');
for (var i = 0; rows.length; i++) {
console.log('rows.attr("id")' + rows[i].id);
}
});
答案 3 :(得分:2)
给定选择器(此处为#mytable tbody tr.selected
)的jQuery实例可以在您执行时立即引用。但是,这有一个有趣的效果,即回引内部指针当前引用的集合中的元素(对于大多数情况,这被认为是第一个元素。Reference here。)。
为避免这种情况,请考虑按如下方式修改代码:
将jQuery对象用作数组:
$('#foo').on('click', function () {
var rows = $('#mytable tbody tr.selected');
for (var i = 0; i<rows.length; i++) {
console.log('rows.attr("id")' + rows[i].attr('id'));
}
});
使用jQuery.forEach
进行迭代:
$('#foo').on('click', function () {
var rows = $('#mytable tbody tr.selected');
rows.forEach(function() {
console.log($(this).attr("id"));
});
});