2010-08-23 68 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"); 
}); 
相關問題