2010-08-23 81 views
9

我有一个带有this变量的jquery对象的引用。我正在寻找一种将子选择器应用到对象的方法。有没有这样的事情作为一个相对的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

可以使用.find()时为好,这样有child selector (>)开始:

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

这是一个经常被忽视的使用情况,但它只是非常适合你以后。

+0

为什么没有_I_想到那个? – Eric 2010-08-23 10:56:09

+0

你实际上可以使用'>'选择器而没有任何东西在它前面? *刮头*这当然是无效的CSS,我没有看到它在API页面中提到...嗯...现在就试试 – 2010-08-23 10:56:28

+0

@Yi Jiang:这样的东西在CSS中没有意义,因为有没有上下文。在JavaScript/jQuery选择器中,它更有意义。 – 2010-08-23 11:00:18

6

正如尼克说,你可以使用find()方法,或者您可以使用selector context

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

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

*是*'.find()',只是更多/额外的步骤先到达那里:) – 2010-08-23 10:57:00

+0

@Nick:是的,但差异是微不足道的,我认为它看起来更整洁,更不用说提及5或6个字符; ) – 2010-08-23 10:58:08

+0

@Andy - 就是这样,差异真的可以加起来,看看代码路径:http://github.com/jquery/jquery/blob/master/src/core.js#L62 With'。 find()'你做1'if()'检查(得到'$(this)'),然后去Sizzle,用'$(selector,this)'格式你做if()'和2个正则表达式到达相同的地方...如果你正在循环,那真的可以加起来。如果你不循环,我同意,但运行这一点时性能是一个因素。 – 2010-08-23 11:05:34

4

的另一种方法将传递第二个参数$('selector', context),它定义了一个上下文搜索。

默认情况下,选择器在DOM中开始在文档根处开始 的搜索。但是,通过对$()函数使用可选的第二个参数,可为 提供备用上下文。

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