#jquery #jquery-selectors
#jquery #jquery-селекторы
Вопрос:
У меня есть таблица с 6 столбцами. Я хочу запустить функцию для последних 3 столбцов каждой строки (исключая строку заголовка). У меня есть следующий селектор, который работает:
$('table.listviewtable > tbody > tr:gt(0)').find('td:gt(2)')
.each(function () { runMyFunction($(this)); });
Есть ли способ сделать все это в одном селекторе (т.е. без промежуточного find
)?
Обновить:
Я пытался
$('table.listviewtable > tbody > tr:gt(0) td:gt(2)')
и
$('table.listviewtable > tbody > tr:gt(0) > td:gt(2)')
но они не сработали. Они вернули 4-й, 5-й и 6-й столбцы 2-й строки и все столбцы всех последующих строк.
Комментарии:
1.
td:gt(2)
не работает, потому что исключает первые 3 элемента TD из всего набора элементов TD, а не первые 3 элемента TD из каждой строки.2. @Sime: да, я это понял. Именно тогда я ввел промежуточную функцию find(), чтобы заставить работать исходную версию. И поскольку существует большая разница между индексом и дочерним элементом, я восстановил часть заголовка вопроса. Для дальнейшего использования я хочу, чтобы было ясно, что мне нужны столбцы каждой строки (дочерние элементы), а не последние столбцы последней строки в таблице (индекс).
Ответ №1:
Поехали:
$('table.listviewtable td:nth-child(n 4)')
Живая демонстрация: http://jsfiddle.net/simevidas/qJ3tP/1
(Я предполагаю, что вы используете TH-элементы для ячеек заголовка.)
Комментарии:
1. ДА! Это именно так. Я мог сказать это еще до того, как протестировал это. Я посмотрел на n-й дочерний элемент, но все примеры показывали множители n. Никогда не приходило в голову попробовать сложение. Должно быть, в пятницу уже конец рабочего дня. Спасибо!
2. @Rich В спецификации приведены отличные примеры: w3.org/TR/css3-selectors/#nth-child-pseudo
3.Если таблица использует
<TD>
элементы для строки заголовка, используйте$('table.listviewtable tr:not(:first-child) td:nth-child(n 4)')
jsfiddle.net/CeRvV/2
Ответ №2:
Правило
Общее правило для получения X последних TD из TR является:
$('#tbl tr td:nth-last-child(-n X)');
Пример
// Example for the last 3 paragraphs in some section:
$('#my_section p:nth-last-child(-n 3)');
// It's exactly the same as:
$('#my_section p:nth-last-child(3-n)');
ДЕМОНСТРАЦИЯ
<!-- CSS -->
<style>
td {
border: solid 1px #999;
padding: 2px;
}
</style>
<!-- HTML -->
<p>Last 3 cells made gray using jQuery</p>
<table>
<tr>
<td>One</td>
<td>Two</td>
<td>Three</td>
<td>Four</td>
</tr>
</table>
<!-- JavaScript -->
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script>
$(document).ready(function() {
$('table tr td:nth-last-child(-n 3)').css('background', '#CCC');
});
</script>
Спасибо
Ответ №3:
$('table.listviewtable > tbody > tr td:gt(2)')
Ответ №4:
Самый простой и очевидный селектор будет:
$('tr').each(
function(){
$(this).find('td:gt(2)').css('background-color','#ffa');
});
Отредактировано, потому что я идиот и упустил из виду очевидный недостаток в первом предложении. Кстати, я предполагаю правильную разметку, используя th
для строк заголовка. Однако вы могли бы изменить селектор на:
$('tbody tr')
Чтобы обойти это, если вы не используете th
элементы.
Ответ №5:
как насчет
$('td:gt(2)', 'table.litviewtable')
конечно, если вы используете th в заголовке.