2013-04-02 4 views
7

Для примера у меня есть <div class="first"> containig другие <div> «S и выбранный первый и толкнул его в переменнуюJQuery: использование («родитель> ребенок») с переменным

variable = $('div.first') 

А теперь я хочу что-то вроде этого

$(variable + " > div") 

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

var tableRows = $('table > tbody > tr'); 
var tableBodyCols = $(tableRows[i]+'> td'); // Doesn't work :(

ответ

14

Использование .children()

var tableBodyCols = tableRows.children('td'); 

Или селектор контекста:

var tableBodyCols = $('> td', tableRows); 

Оба равнозначны, но бывший легче читать имхо.

Это fiddle, демонстрирующий оба.


И итерацию по всем наборам детей each строки таблицы:

tableRows.each(function() { 
    var tableBodyCols = $(this).children('td'); 
    //... 
}); 

Но если вы действительно предпочитаете for петлю или вам нужно получить столбцы конкретной строки, а затем eq ваш друг ,

for (var i = 0; i < tableRows.length; i++) { 
    var tableBodyCols = tableRows.eq(i).children('td'); 
    //... 
} 

Вот обновленный fiddle.

+0

бывший является гораздо более эффективным слишком – Alnitak

+0

@Alnitak Да приятно отметить, что не создает новый объект JQuery с нуля тоже. '=]' –

+0

Мой английский плохой, и я думал, что 'children()' selector выбирает только первого ребенка (я думал, что «дети» - это особая форма «дети»). В любом случае, большое спасибо. Контекстный селектор выглядит очень красиво. – tumoxep

0

Чтобы получить клетки строки индекса i, вы можете использовать

var tableBodyCols = $('td', tableRows[i]); 

Если вы действительно может иметь более чем один уровень td, используйте

var tableBodyCols = tableRows.eq(i).children('td'); 

или использовать родной РОМ объект:

var tableBodyCols = tableRows[i].cells; 
+0

, что сначала не является строго родительским, а '.find()'. Третий - теперь просто массив, а не коллекция jQuery ... ;-) – Alnitak

0

Если вы хотите все<td> клетки, используют:

var tableBodyCols = tableRows.children('td'); 

Если вы хотите только те, для конкретных ряда i:

var tableBodyCols = tableRows.eq(i).children('td'); 

где i будет начинаться с нуля для первой строки.

1

Вы не можете сделать $(variable + " > div"), потому что variable не является строкой, а элементом jquery.

Но вы можете попробовать:

variable.children("div"); 
Смежные вопросы