2014-11-21 57 views
1

說我有下面的代碼:如何從jQuery對象中選擇一個元素?

<div class="foo"> 
    <div class="t1">A</div> 
    <div class="t2">B</div> 
</div> 

//JS 

var obj = $('.foo'); 

現在我想從T2元素中的文本。如何使用我的obj對象選擇此選項?

這並不工作:var txt = $(obj + '.t2').text();
這工作得很好:var txt = obj.find('.t2').text();
我也知道我可以用這個var txt = $('.foo .t2').text();

但我認爲使用.find()需要比直接選擇它更多的資源。有沒有一種方法可以直接使用我的obj來選擇子元素?

+0

量在你的例子中可以忽略不計。你總是可以這樣做http://jsfiddle.net/L0h1uq2e/ – j08691 2014-11-21 14:25:47

+0

如果你知道這是一個孩子,你可以使用'.children('。t2')',它只會搜索元素的子元素。 – Stryner 2014-11-21 14:26:23

回答

6

這個以一次嘗試:

var txt = $(obj + '.t2').text(); 

這不工作,因爲你正在試圖將一個字符串追加到一個對象,其結果不會是一個有效的選擇。

var txt = obj.find('.t2').text(); 

這將尋求在原選擇元素的緩存子集內的.t2元素。這是使用您的方案是最好的方法,實際上比例3使用更少的資源:

var txt = $('.foo .t2').text(); 

這也將工作,但它需要的jQuery再次掃描DOM,這是一些東西,應儘量避免可能。

+2

另一個選項是'$('。t2',obj).text();' – 2014-11-21 14:26:29

+1

@u_mulder這是真的,但如果內存服務的話,這個語法只是'.find()'方法的語法糖。 – 2014-11-21 14:27:16

+0

所以最好使用'.find()'而不是再次掃描整個DOM? – Steven 2014-11-21 14:28:47

0

你可以嘗試

obj.children().eq(1).text() 

這樣您訪問obj變量的孩子,在第二個(0基於指數)和訪問其文本。

0

如果您的情況是您必須通過您的obj元素,那麼我相信find()是要走的路。我在jQuery的find()文檔中沒有看到關於效率與直接選擇器相比是否有效的任何內容,但是我認爲你只需要搜索obj的後裔並使用find()這一事實意味着它不能太低效。

obj.find('.t2').text() 
+0

你不需要使用'$()',因爲'obj'已經是一個jQuery對象了。 – Steven 2014-11-21 14:29:50

0

最直接的方式來選擇兒童將得到所有的孩子和通過索引來訪問它們:

var ch = obj.children(); 
var text = ch.eq(1).text(); 

這自然意味着你必須知道的子元素的順序。

您可以在children method中使用選擇器。這將獲得選擇相匹配的孩子,但使用find唯一的區別是,它僅查找直接孩子,所以在你的情況下,它的工作原理是一樣的:你指的是資源的

var text = obj.children('.t2').text(); 
+0

謝謝。我在這個地方使用了這個,elemnt可能會在'obj'的DOM中更深一些。所以使用'.find()'更好。 – Steven 2014-11-21 14:34:54

相關問題