Jquery - получить все строки, кроме первого и последнего
Я хочу динамически добавлять класс во все строки таблицы, кроме первой и последней строки. как бы я это сделал, не назначая класс css для строк, чтобы идентифицировать их. Я получаю все, кроме первой строки в настоящее время с
$("#id").find("tr:gt(0)")
Мне нужно как-то совместить это с not("tr:last")
?
Ответы
Ответ 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>