我想从表中获取一个未知的(更改)行数,在第一个单元格和最后一个单元格之间。我正在使用jQuery,并且不知道为什么$(这个).length不给出索引的总长度。
jQuery的:
$("#parent table:first tr").each(function(i){
var goodlng = $(this).parent().children("tr").length -1; //this works
var badlng = $(this).length -1; //this doesn't! (always == -1)
});
goodlng
良好做法是什么?这似乎是一个黑客,必须去父母,然后回到孩子们。
这是一个jsfiddle(让console.log())打开。
示例HTML:
<div id="parent">
<table>
<tr>
<td>unwanted 1</td>
</tr>
<tr>
<td>wanted!</td>
</tr>
<tr>
<td>unwanted2</td>
</tr>
</table>
</div>
tl; dr :为什么每个函数中都没有$(this).length == $(this).parent().children("tr").length
。还有另一种更好的方法。
答案 0 :(得分:1)
实际上,这个$(this).parent().children("tr").length
是处理事情的正确方法。 this
,在上面的上下文中是对tr
节点本身的引用。 tr
。length = tr
的长度。另一方面,tr.parent().children("tr")
是节点兄弟的列表,因此tr.parent().children("tr").length
是兄弟姐妹的数量。
答案 1 :(得分:1)
这是每个元素的上下文,而不是所有元素。因此,this
一次只有一个tr
。这就是长度没有所有元素的原因。
答案 2 :(得分:1)
您的问题是“细胞”,但似乎您正在尝试获取行数。
如果你真的想要它.each()
,你可以使用siblings()
[docs]方法和andSelf()
[docs]方法。
$(this).siblings().andSelf().length
但如果行没有改变,为什么要重复?
或者如果他们正在改变,我只是使用表格中的原生rows
属性来获取长度。
var table = $("#parent table:first");
table.find('tr').each(function() {
var len = table[0].rows.length;
});
答案 3 :(得分:0)
each()函数不知道它正在处理的元素集合。它始终处理单个元素。这就是为什么当你去找父母并要求所有孩子得到正确的答案时。
$(this)
简单地引用您正在处理的当前tr元素,而不是它们的集合。