Подтвердить что ты не робот

Jquery - получить все строки, кроме первого и последнего

Я хочу динамически добавлять класс во все строки таблицы, кроме первой и последней строки. как бы я это сделал, не назначая класс css для строк, чтобы идентифицировать их. Я получаю все, кроме первой строки в настоящее время с

$("#id").find("tr:gt(0)")

Мне нужно как-то совместить это с not("tr:last")?

4b9b3361

Ответ 1

Отбросьте gt(), так как я предполагаю, что это будет немного медленнее, чем :first.

Используйте not() в сочетании с :first и :last:

$('table#tbl > tbody > tr').not(':first').not(':last').addClass('highlight');

Большинство браузеров автоматически добавляют элемент 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');
}

Надеюсь, что это решает вашу проблему!

Ответ 2

Попробуйте следующее:

.not(':first').not(':last')

Ответ 3

почему не только это?

$('table tr:not(:first-child):not(:last-child)');

работает как чистый селектор CSS.

Ответ 4

Вы можете комбинировать методы .not() в одном, разделив селектора запятыми:

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

Обратите внимание, что второй недействителен в чистом CSS, только как селектор jQuery. Для чистого CSS вам нужно будет использовать ответ @Sumit.

Ответ 5

Странные опубликованные предложения не сработали, все они должны работать! НО...

Если это не сработало, сделайте это так... немного медленнее, но ДОЛЖНО РАБОТАТЬ!! TRY:

$('table#tbl tr').addClass('highlight');
$('table#tbl tr:first-child').removeClass('highlight');
$('table#tbl tr:last-child').removeClass('highlight');

Ответ 6

Вы также можете использовать метод .slice(), чтобы удалить первый/последний элементы из набора:

$('table tr').slice(1, -1);

Метод .slice() по существу создает новый объект jQuery с подмножеством элементов, указанных в исходном наборе. В этом случае он исключит элементы с индексом 1 и -1, которые являются соответственно первыми/последними.

Пример:

$('table tr').slice(1, -1).css('background-color', '#f00');
table { width: 100%; }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<table>
  <tr><td>1</td></tr><tr><td>2</td></tr>
  <tr><td>3</td></tr><tr><td>4</td></tr>
  <tr><td>5</td></tr><tr><td>6</td></tr>
</table>