i want to dynamically add a class to all rows of a table except the first and last row. how would i do this without assigning a css class to the rows to identify them. I am getting all but the first row currently with
$("#id").find("tr:gt(0)")
i need to combine this with not("tr:last")
somehow maybe?
Drop the gt()
, as I'd assume it's a tiny bit slower than :first
.
Use not()
in conjunction with :first
and :last
:
$('table#tbl > tbody > tr').not(':first').not(':last').addClass('highlight');
Most browsers automatically add an tbody
element in the table markup if that's missing, that is why the immediate children selector was failing – there were no <tr>
elements as an immediate children to the <table>
tag.
I am not 100% sure this is the way all browsers do it, so it would be safer to just add the <tbody>
manually. Otherwise you need a little sniffing and cannot do it as an one liner:
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');
}
Hope this solves your problem!
Try this:
.not(':first').not(':last')
why not just this?
$('table tr:not(:first-child):not(:last-child)');
works as pure CSS selector as well.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With