JQuery: нужна помощь с использованием селектора в качестве метода - PullRequest
0 голосов
/ 29 июня 2011

Я пытаюсь выбрать <tr> элементы из таблиц, которые содержат подтаблицы, чтобы извлечь <tr> элементы только из таблиц, а не из подтаблиц, поэтому я не могу использовать метод find().Другая проблема заключается в том, что таблицы могут иметь или не иметь <tbody>, поэтому я не могу использовать children().

HTML-код

<table id='table1' class='toptable'>
    <tbody>
        <tr><td>
            <table class='subtable'>
                <tr></tr>   
            </table>
            </td></tr>
    </tbody>
</table>
<table id='table2' class='toptable'>
        <tr><td>
            <table class='subtable'>
                <tr></tr>   
            </table>
        </td></tr>
</table>

Решение до сих пор

Я нашел способ выделить <tr> элементовиз таблиц (независимо от того, имеют ли они tbody или нет) без выбора элементов <tr> из подтаблиц с помощью дочернего селектора >.

$('#table1 > tbody > tr).length // -> 1
$('#table2 > tbody > tr).length // -> 1

Вопрос

Как я могу преобразовать вышеупомянутые селекторы в один метод, который я смог бы применить к объекту таблицы, позволяя мне проходить через коллекцию table.toptable и повторно использовать тот же метод с обеими таблицами?(см. ниже)

$('.toptable').each(function(){
   $(this).({trs-from-table}).each( ... );
});

JSFIDDLE

Вот ссылка

Ответы [ 2 ]

2 голосов
/ 29 июня 2011

Это должно сработать:

$('.toptable > tbody > tr')....

, даже если вы не добавите явный <tbody> браузер должен автоматически вставить его для вас.

См. http://jsfiddle.net/alnitak/reDux/1/

Или, если вы хотите работать с конкретным элементом таблицы $el:

$el.children('tbody').children('tr');

например:

$('.toptable').each(function() {
    $(this).children('tbody').children('tr')...
});
0 голосов
/ 29 июня 2011

Вам нужно:

$('tr:has(table)')

Это даст вам набор, содержащий <tr> элементов, которые содержат <table>.

...