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

jquery-获取除第一行和最后一行之外的所有行,jquery,jquery-selectors,Jquery,Jquery Selectors,我想动态地将一个类添加到表的所有行中,第一行和最后一行除外。如果不给行分配css类来标识它们,我该如何做呢。除第一排外,我目前正在使用 $("#id").find("tr:gt(0)") 我需要将它与not(“tr:last”)结合起来,也许是某种原因?删除gt(),因为我假设它比:first稍微慢一点 将not()与:first和:last结合使用: $('table#tbl > tbody > tr').not(':first').not(':last').addClass('

我想动态地将一个类添加到表的所有行中,第一行和最后一行除外。如果不给行分配css类来标识它们,我该如何做呢。除第一排外,我目前正在使用

$("#id").find("tr:gt(0)")
我需要将它与
not(“tr:last”)
结合起来,也许是某种原因?

删除
gt()
,因为我假设它比
:first
稍微慢一点

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

$('table#tbl > tbody > tr').not(':first').not(':last').addClass('highlight');
大多数浏览器会自动在表标记中添加
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');
}

希望这能解决你的问题

奇怪,贴出的建议不起作用,它们都应该起作用!但是

如果它不起作用,就这样做。。。。稍微慢一点,但必须工作!! 尝试:

试试这个:

.not(':first').not(':last')
为什么不仅仅是这个

$('table tr:not(:first-child):not(:last-child)');
也可用作纯CSS选择器。

您还可以使用从集合中删除第一个/最后一个元素:

$('table tr').slice(1, -1);
基本上,创建一个新的jQuery对象,其中包含初始集合中指定的元素子集。在这种情况下,它将排除索引为
1
-1
的元素,这两个元素分别是第一个/最后一个元素

例子:
$('table tr').slice(1,-1).css('background-color','#f00')
表格{宽度:100%;}

12
34
56

通过用逗号分隔选择器,可以将
.not()
方法组合为一个:

$('#id tr').not(':first, :last');
$('#id tr:not(:first, :last');

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

这是有效的,除非最后一行中有一个表,情况就是这样。这是一个服务器控件,因此不容易更改。有什么想法吗?headerheader oneone two footer onefooter two footer threefooter footer footer footer footer footer footer footer footer footer当然,使用
$('id>tr')
而不是
$('id tr')
。这将强制选择器仅选择直接子级。这要求
#id
元素是
。感谢您的回复。对于我在第一条注释中发布的html表,
$('tbl>tr')。not(':first')。not(':last')。addClass(“highlight”)似乎不起作用,
$('table#tbl>tr')。不是(':first')。不是(':last')。addClass(“highlight”)塔图-我将此标记为答案-感谢所有帮助。我对tbody一无所知——我想知道哪些浏览器可以做到这一点。必须处理一个不存在的标记似乎很疯狂:first现在已被弃用。为我工作!似乎比其他人提出的更容易使用。
$('#id tr').not(':first, :last');
$('#id tr:not(:first, :last');