通过jQuery,是否有更好的方法根据表格行数选择表格?

3

我想使用jQuery获取一组具有超过X行的表格。目前,我正在执行类似以下代码的操作:

    $("table").each(function(){
 if($(this).find("tr").length > x){
  tableArray[tableArray.length] = $(this);
 }
});

然后对tableArray的成员进行操作。

获取这些表格是否有更好的方法,也许我错过了一个好的选择器?

谢谢。

3个回答

3
尝试使用 :has 选择器:
$('table:has(tr:eq('+x+'))');

那只会选择具有行x的表格。请注意,:eq()以零为基础索引作为其参数,这意味着如果x为1,则将选择包含2行或更多行的表格。 编辑 对于我来说,:has:nth-child:eq相比出现了问题。但是.has()(该方法等效于选择器)可以正常工作:
alert($('table').has("tr:nth-child(2)").length)​

需要注意的是,nth-child函数中传递的参数并不像:eq函数一样基于0。

例子 - 弹出所有包含两行或更多行的表格数量。


奇怪的是,:has 似乎不喜欢 :eq,总是返回 0。http://jsfiddle.net/S2EE2/ (以前从未使用过 :has,所以现在决定尝试一下) - Nikita Rybak
@Nikita Rybak:我已经领先你了 :-) 请查看我的编辑和示例 http://jsfiddle.net/baNAJ/。 - Andy E
谢谢回复。我正在使用这个问题在Firefox扩展中,它似乎与您的示例相矛盾。由于.has()选择器只向下一个后代,我认为<tbody>会让它感到困惑。很遗憾:nth-child与:has不兼容,后者可以深入到任何子级。我想我会使用当前的解决方案。 - bubbahotep
@bubbahotep: .has() 遍历所有后代元素 - 将匹配元素集合缩减为具有与选择器或 DOM 元素匹配的后代元素的元素。此外,如果您检查我的链接示例,这些表格具有 <tbody> 元素。也许问题出在其他地方? - Andy E

0

看这个
http://api.jquery.com/nth-child-selector/

$("table tr:nth-child(" + (x + 1) + ")").parent();

没有测试过,但应该很接近。请注意,根据您的表格结构,您可能需要两个“.parent()”调用。


0

我觉得你的方法挺好的。

另外一种方法是使用:has选择器配合nth-child使用: 让jQuery查找$("tbody:has(:nth-child(4)))...". 这意味着“查找所有的表格,它们的元素有4个或更多的孩子”。由于的子元素通常是元素,因此这将解决问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接