我正在尝试选择表格的第一行。注意:第一行包含在thead
标记中,因此:
<table>
<thead>
<tr> <!-- first row --> </tr>
</thead>
<tbody>
<tr> <!-- body --> </tr>
</tbody>
<tfoot>
<tr> <!-- body --> </tr>
</tfoot>
</table>
如果不是包装器标签,则'select first row'提示可以正常工作。这是我尝试但不起作用的:
$("*:not(thead)", tableSelector).remove();
即,我想使用“非tfoot”选择器摆脱tbody和tfoot选择器。因为除了<thead>
和内部的所有内容之外,我想从表中删除其他所有内容。所以基本上我要做的就是选择除了thead之外的所有东西以及它里面的东西;像:not(thead *)
这样的东西可以起作用,但不起作用。
我的解决方法是$("tbody, tfoot", tableSelector).remove();
,但我想学习并了解如何使用相反的(非选择器)。
答案 0 :(得分:20)
你的问题并不完全清楚。要选择单个表中的第一行:
$("table tr:first")...
或反过来:
$("table tr:not(:first)")...
将会这样做,但是如果有多个表,它将会中断(即使有三个表,它也只会选择一行)。你可以用以下方法解决这个问题:
$("table").each(function() {
$(this).find("tr:first")...
});
您可以使用以下内容获取不在THEAD中的所有行:
$("table > :not(thead) > tr")...
编辑:我认为你过于复杂了。如果你想删除除THEAD及其内容之外的所有内容,那就相当简单了:
$("table > :not(thead)").remove();
如果要将TBODY和TFOOT元素保留在原位,请将其更改为:
$("table > :not(thead) > tr").remove();
答案 1 :(得分:1)
在表格选择器上使用children()将仅选择直接子节点。您可以使用非选择器过滤此内容。
$(tableSelector).children(':not(thead)').remove();
答案 2 :(得分:1)
我正在尝试选择表格的第一行。
为什么不使用好的旧DOM?
mytable.rows[0]
答案 3 :(得分:0)
如果您要移除除table
之外的任何child of thead
,请尝试使用此选择器:
table > *:not(thead)
编辑由于您指出您已在变量中使用该表:
$("> *:not(thead)", context)
答案 4 :(得分:0)
“:not”伪选择器接收另一个选择器作为参数,因此您实际上可以删除除此之外的所有内容,如下所示:
$(':not(thead, thead *)', 'table').remove();
这与您在your comment中编写的内容非常相似,除了您没有使用上下文(删除了表节点)并且您使用了不包含“内容”中的“所有内容”的子操作数,但只包括它的直接孩子。删除子操作数“&gt;”排除所有节点的后代,而不仅仅是直接子节点。
答案 5 :(得分:-1)
我会像:
$('table thead tr:first-child')