jquery - 获取除第一个和最后一个之外的所有行

use*_*757 52 jquery jquery-selectors

我想动态地向表的所有行添加一个类,除了第一行和最后一行.如果没有为行分配css类来识别它们,我将如何做到这一点.我正在获得除了第一行之外的所有内容

$("#id").find("tr:gt(0)")
Run Code Online (Sandbox Code Playgroud)

我需要以not("tr:last")某种方式结合这个吗?

Tat*_*nen 97

放下gt(),因为我认为它比它慢一点:first.

使用not()结合:first:last:

$('table#tbl > tbody > tr').not(':first').not(':last').addClass('highlight');
Run Code Online (Sandbox Code Playgroud)

大多数浏览器会自动tbody在表标记中添加一个元素(如果缺少),这就是直接子选择器失败的原因 - 没有<tr>元素作为<table>标记的直接子元素.

我不是100%确定这是所有浏览器的方式,所以只需<tbody>手动添加就更安全了.否则你需要一点点嗅探,不能作为一个班轮:

if($('table#tbl > tbody').size() > 0) {
    $('table#tbl > tbody > tr').not(':first').not(':last').addClass('highlight');
} else {
    $('table#tbl > tr').not(':first').not(':last').addClass('highlight');
}
Run Code Online (Sandbox Code Playgroud)

希望这能解决你的问题!


mik*_*elz 14

试试这个:

.not(':first').not(':last')
Run Code Online (Sandbox Code Playgroud)


Pro*_*mit 12

为什么不呢?

$('table tr:not(:first-child):not(:last-child)');
Run Code Online (Sandbox Code Playgroud)

也适用于纯CSS选择器.


Gre*_*ina 7

您可以.not()通过用逗号分隔选择器来将这些方法合二为一:

$('#id tr').not(':first, :last');
$('#id tr:not(:first, :last');
Run Code Online (Sandbox Code Playgroud)

请注意,第二个在纯 CSS 中无效,只能作为 jQuery 选择器。对于纯 CSS,您必须使用 @Sumit 的答案。