У меня есть таблица в сценарии стола. Когда я пытаюсь выбрать trs, используя $("#table tr");
, тогда он также выбирает все tr из внутренних таблиц.Выберите TRs в таблице, используя jquery.
Как выбрать tr из внешней таблицы.
У меня есть таблица в сценарии стола. Когда я пытаюсь выбрать trs, используя $("#table tr");
, тогда он также выбирает все tr из внутренних таблиц.Выберите TRs в таблице, используя jquery.
Как выбрать tr из внешней таблицы.
Используйте вместо этого:
$('#table > tr'); // choose direct child tr nodes from table with id 'table'
Или
$('#table > tbody > tr');
Если у вас есть tbody
элемент.
Вот ссылка на Jquery документации: http://api.jquery.com/child-selector/
, если у вас есть несколько таблиц в одной странице, дают им классы, так что вам не придется пройти через это каждый другой раз ..
например
$('.mytable > tr')
HTML
<table class="mytable">
<tr>
<td>...</td>
</tr>
</table>
Наглядно, похоже
$('table.top > tr');
будет достаточно. Однако вы не можете гарантировать, что это будет. Некоторые браузеры неявно вставляют элемент tbody
в качестве родителя для всех tr
. Это технически требуется для некоторых версий стандарта HTML. Однако не все браузеры делают это. Для обеспечения безопасности, вероятно, вы должны сделать что-то вроде этого:
$('table.top > tr, table.top > thead > tr, table.top > tbody > tr');
Немного многословен, но более вероятно, будут работать в более ситуации.
@Stano Хороший улов. Я добавил класс. – lonesomeday
@Stano [Однако это не требуется в HTML5] (http://www.w3.org/html/wg/drafts/html/master/tabular-data.html#the-table-element). – lonesomeday
Да, это не требуется в HTML, но автоматически создается в DOM. Таким образом, '$ ('table.top> tr');' selector не найдет прямых 'tr' детей. Просто протестировал его в FF и всех IE. ** Все ** браузеры неявно вставляют элемент tbody. – Stano
Yep:
$('#table > tr');
Но также, если вы делаете стилистические изменения, убедитесь, что вы установили базовый стиль для всех строк таблицы первым (или назначьте внутренние таблицы конкретно).
Например, если вы выполните $("#table > tr").css("background-color", "orange");
, внутренние таблицы также станут оранжевыми, потому что по свойствам CSS они наследуют их родительские стили.
Установить базовый цвет для всех строк таблицы первой:
tr {
background-color: white;
}
Есть два варианта selecting direct children в теле таблицы с JQuery:
var rows = $('#table > tbody > tr');
или
var rows = $('#table').children('tbody').children('tr');
Элемент tbody
created automatically в DOM (также в устаревшем IE5.5), даже если он не был написан в HTML.
Использование jQuery's child selector более читаемо и a bit faster чем .children() method.
Я только что протестировал html без тега 'tbody' в IETester, и даже старый хороший IE5.5 (как и все новые браузеры) автоматически создает отсутствующий тег' tbody' в DOM. Таким образом, первый селектор всегда будет соответствовать нулевым строкам. Подробнее [здесь] (http://stackoverflow.com/questions/938083/why-do-browsers-insert-tbody-element-into-table-elements#938143). – Stano