2011-04-06 118 views
1

的孩子們,我有以下的jQuery片段(與each用來遍歷結果表):jQuery選擇 - 兒童

$('.foo').children('.bar').children('.first_baz').text(); 
$('.foo').children('.bar').children('.second_baz').text(); 

我使用它來訪問$firstvalue$secondvalue

<tr class='foo'> 
<td class='bar'><span class='first_baz'>".$firstvalue."</span><span class='second_baz'>".$secondvalue."</span></td> 
</tr> 

這工作,但它是有效的?我懷疑有更好的方式來獲得這些價值......它是什麼?

回答

5

如果first_baz和second_baz元素只是在表中,沒有別的地方的頁面,那麼你可以跳過孩子函數中使用下面的代碼片段:

$('.first_baz').text(); 
$('.second_baz').text(); 

如果上述情況沒有按't保持良好,那麼你可以縮短語句到

var parent = $('.foo'); //Get the parent context so that its not queried twice 
$('.first_baz', parent).text(); 
$('.second_baz', parent).text(); 
+0

每個類都有很多實例,所以我依賴於'$(this)',因爲你的第二個例子是完美的。我已經把'$(this)'賦給'self',所以'$('。first_baz',self).text();'完美地工作。使用上下文非常有效。謝謝! – Lothar 2011-04-07 05:37:24

1

您可以緩存所有.bar

var bar = $('.foo').children('.bar') 
bar.children('.first_baz').text(); 
bar.children('.second_baz').text(); 
1

我還沒有嘗試,但這應該是更有效率。

$('.foo .bar .first_baz').text(); 
$('.foo .bar .second_baz').text(); 
+0

不是。 Sizzle從右到左工作,並對ID和元素選擇器進行了優化。我預測,課堂選擇或其組合的順序對性能沒有影響,如果是這樣,則會是負面的。 http://net.tutsplus.com/tutorials/javascript-ajax/quick-tip-think-right-to-left-with-jquery/ – 2011-04-06 21:20:44

0
$('span.first_baz').text() 

,如果你不需要母結構, 或

$('tr.foo > td.bar > span.first_baz').text() 

如果你這樣做。