我正在测试表中的一行是否是第一个孩子。到目前为止,我有:
//the loop works
$('#GridFolderPopup').find('tr').each(function () {
if ( $(this).is(:first) == true ) //this is the faulty line
{
$(this).addClass('GridFolderRow');
};
});
有什么建议吗?
由于
答案 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');