2013-06-25 3 views

ответ

5

Используйте вместо этого:

$('#table > tr'); // choose direct child tr nodes from table with id 'table' 

Или

$('#table > tbody > tr'); 

Если у вас есть tbody элемент.

Вот ссылка на Jquery документации: http://api.jquery.com/child-selector/

+1

Я только что протестировал html без тега 'tbody' в IETester, и даже старый хороший IE5.5 (как и все новые браузеры) автоматически создает отсутствующий тег' tbody' в DOM. Таким образом, первый селектор всегда будет соответствовать нулевым строкам. Подробнее [здесь] (http://stackoverflow.com/questions/938083/why-do-browsers-insert-tbody-element-into-table-elements#938143). – Stano

0

, если у вас есть несколько таблиц в одной странице, дают им классы, так что вам не придется пройти через это каждый другой раз ..

например

$('.mytable > tr') 

HTML

<table class="mytable"> 
    <tr> 
    <td>...</td> 
    </tr> 
</table> 
1

Наглядно, похоже

$('table.top > tr'); 

будет достаточно. Однако вы не можете гарантировать, что это будет. Некоторые браузеры неявно вставляют элемент tbody в качестве родителя для всех tr. Это технически требуется для некоторых версий стандарта HTML. Однако не все браузеры делают это. Для обеспечения безопасности, вероятно, вы должны сделать что-то вроде этого:

$('table.top > tr, table.top > thead > tr, table.top > tbody > tr'); 

Немного многословен, но более вероятно, будут работать в более ситуации.

+0

@Stano Хороший улов. Я добавил класс. – lonesomeday

+0

@Stano [Однако это не требуется в HTML5] (http://www.w3.org/html/wg/drafts/html/master/tabular-data.html#the-table-element). – lonesomeday

+0

Да, это не требуется в HTML, но автоматически создается в DOM. Таким образом, '$ ('table.top> tr');' selector не найдет прямых 'tr' детей. Просто протестировал его в FF и всех IE. ** Все ** браузеры неявно вставляют элемент tbody. – Stano

0

Yep:

$('#table > tr'); 

Но также, если вы делаете стилистические изменения, убедитесь, что вы установили базовый стиль для всех строк таблицы первым (или назначьте внутренние таблицы конкретно).

Например, если вы выполните $("#table > tr").css("background-color", "orange");, внутренние таблицы также станут оранжевыми, потому что по свойствам CSS они наследуют их родительские стили.

Установить базовый цвет для всех строк таблицы первой:

tr { 
background-color: white; 
} 
0

Есть два варианта selecting direct children в теле таблицы с JQuery:

var rows = $('#table > tbody > tr'); 

или

var rows = $('#table').children('tbody').children('tr'); 

Элемент tbodycreated automatically в DOM (также в устаревшем IE5.5), даже если он не был написан в HTML.
Использование jQuery's child selector более читаемо и a bit faster чем .children() method.