2010-08-23 1 views
9

У меня есть ссылка на объект jquery с переменной this. Я ищу способ применения дочернего селектора к объекту.Есть ли такая вещь, как относительный селектор jQuery?

Я использую $(this).find('table > tbody > tr > td'), но то, к чему я стремлюсь, является чем-то более похожим на $('[Value of $(this) goes here somehow] > table > tbody > tr > td').

Я понимаю, что могу сделать $(this).children('table').children('tbody').children('tr').children('td'), но мне было интересно, если бы был какой-то синтаксический сахар, который я мог бы использовать здесь.

ответ

19

Вы можете начать с child selector (>) при использовании .find(), а также, как это:

$(this).find('> table > tbody > tr > td') 

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

+0

Почему не _I_ думать об этом? – Eric

+0

На самом деле вы можете использовать селектор '>', не имея ничего перед собой? * Scratch head * Это, безусловно, недействительный CSS, и я не вижу его упоминания на страницах API ... Хмммм ... даст ему попробовать сейчас –

+0

@Yi Jiang: Что-то вроде этого бессмысленно в CSS, потому что есть нет контекста. В селекторах JavaScript/jQuery это имеет больше смысла. –

6

Как сказал Ник, вы можете использовать находки(), или вы можете использовать selector context:

$('> table > tbody > tr > td', this) 

// Is the equivalent of 
$(this).find('> table > tbody > tr > td') 
+0

Это * is * '.find()', просто больше/дополнительные шаги, чтобы добраться туда первым :) –

+0

@Nick: да, но разница незначительна, и я думаю, что она выглядит аккуратно, не говоря уже о 5 или 6 символах короче;) –

+0

@ Andy - Это то, что разница действительно может складываться, взгляните на кодовый путь: http://github.com/jquery/jquery/blob/master/src/core.js#L62 С '. find() 'вы делаете 1' if() 'check (чтобы получить' $ (this) '), затем перейдите Sizzle, с форматом' $ (selector, this) ', который вы делаете 7' if() 's и 2 регулярных выражений, чтобы добраться до того же места ... если вы зацикливаете, что действительно может сложить. Если вы не зацикливаетесь, я согласен, но производительность - это фактор, когда это выполняется совсем немного. –

4

Альтернативного путем будет пропусканием второго параметра $('selector', context), который определяет контекст для поиска.

По умолчанию селекторы выполняют поиск в DOM, начиная с у корня документа. Тем не менее, альтернативный контекст может быть задан для поиска, используя необязательный второй параметр для функции $().

$("div.foo").click(function() { 
    $("span", this).addClass("bar"); 
});