获取每个()中索引的总长度

时间:2011-06-09 17:07:32

标签: javascript jquery each

我想从表中获取一个未知的(更改)行数,在第一个单元格和最后一个单元格之间。我正在使用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。还有另一种更好的方法。

4 个答案:

答案 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元素,而不是它们的集合。