2012-11-27 41 views
0

當使用jQuery查找XML DOM結構中的一組元素時;如何以懶惰的方式調用jquery的.find?

將.find與CSS查詢結合使用會導致可迭代的結果,但是jquery將在當時返回所有結果,這很慢並且會暫停我的UI。

我該如何用懶惰的方式迭代結果?

我觀察到有一個.first()方法,但是在文檔中我找不到.next(),我錯過了什麼?

+2

'我無法在文檔中找到.next()你看過在線文檔嗎? http://api.jquery.com,也專門針對下一個:http://api.jquery.com/next/在線文檔非常詳細,在那裏提供的搜索框也非常好幫助你找到任何你可能需要。 – Nope

+0

'next()'和'prev()'也不會執行延遲查詢,它要求您已經有一個jQuery節點集 –

+0

確實,我想要一個'lazy nodeset'。 – Arafangion

回答

2

我最好的建議是包含您的搜索。從不運行全局查詢。如果可能的話,請從您可以通過ID檢索元素搜索(限制節點的數量來遍歷)

例如,而不是下面

var infoList = $("a.query span.info") 

使用

var container = $('#myCt'); 
var infoList = container.find('a.query span.info'); 
// OR more simply (but I'm not sure jQuery optimizes the query) 
var infoList = container.find('#myCt a.query span.info') 
+0

這是有道理的,在沒有懶惰評估的情況下,縮小搜索大小將是一種選擇。 – Arafangion

+1

我不認爲懶惰評估是正確的。你需要的是延遲評估(使用setTimeouts),以便UI線程在執行搜索時有機會更新 –

+0

這將是一種替代方法,我使用'懶惰評估',因爲我想要的概念是:「如果我想要第一個項目,找到它,然後停止尋找,如果我想要下一個項目,開始尋找...「 – Arafangion

-3
$(".class").each(function() { 
//do code here 
}); 
+0

這比'find'更好嗎?真誠的問題。 – Madbreaks

+0

每個迭代中作者使用find()首先獲取所有元素並導致其問題。 「...但是當時jquery會返回所有的結果,這很慢並且會暫停我的UI。」 –

3

是有一個next()prev()您可以使用轉到下一個或前一個同級DOM結構。

+0

該方法存在,但它們並不真正幫助懶惰的查詢。查看我對問題 –

+0

的評論感謝那些,我正在查看沒有.next()的http://api.jquery.com/category/traversing/filtering/。 (我還是jquery的新手),但@JuanMendes對我的問題有正確的解釋。 – Arafangion

+0

@Arafangion:提供準確的選擇器,緩存引用和執行對特定選擇器的子搜索是智能且高效的遍歷,而不是我所知的延遲加載的解釋,但可能是您唯一的**替代方案**給定語言你正在合作。 – Nope