测试第一个孩子

时间:2011-02-16 04:54:16

标签: jquery

我正在测试表中的一行是否是第一个孩子。到目前为止,我有:

    //the loop works
$('#GridFolderPopup').find('tr').each(function () {

    if ( $(this).is(:first) == true ) //this is the faulty line
    {
         $(this).addClass('GridFolderRow');
    };
});

有什么建议吗?

由于

5 个答案:

答案 0 :(得分:28)

尝试使用.is(':first')代替.is(:first)

你可能会把Javascript与Ruby混淆:在Javascript中,冒号不能像这样使用(在字符串之外)。

修改
此外,在您的情况下':first-child'选择器可能更合适。请参阅有关差异的文档

http://api.jquery.com/first-child-selector/
http://api.jquery.com/first-selector/

答案 1 :(得分:7)

这可能是一个解决方案:

$('#GridFolderPopup tr:first').addClass('GridFolderRow');

还要大量减少代码。

答案 2 :(得分:2)

简单地要求table / tbody的第一个孩子比测试其中的每一行更有效率。表越大,差异越大。

因此:

  • 如果您想“查看表格中的 [given] 行是否是第一个孩子”

    if ($(a_given_row).prev().length === 0) {
        // no element before this row, so it's the first one.
    }
    
  • 如果你想得到一个表的第一行:

    // Directly ask the DOM for the first element child of the table/tbody
    var firstRow = a_given_table.firstChild;
    do {
       firstRow = firstRow.nextSibling;
    } while (firstRow.nodeType !== 1)
    
    // If you don't need to support IE8-, you can use this single line instead:
    var firstRow = a_given_table.firstChildElement;
    

    请参阅此处的效果比较:http://jsperf.com/get-first-child-element

答案 3 :(得分:0)

尝试以下代码

var allRows=$('#GridFolderPopup').find('tr');
$.each(allRows,function(cntr,value){
            if(cntr==0)
                 $(this).addClass('GridFolderRow');
});

答案 4 :(得分:0)

$('#GridFolderPopup').find('tr').eq(0).addClass('GridFolderRow');