2012-12-17 96 views
0

我使用jQuery選擇具有一定的前綴開頭的所有錨標籤,然後調用每個函數:jQuery如何抓取元素?

$('a[id^="lblMyLabel"]').each(function() { 
     doSomething(this.id); 
}); 

和DoSomething的裏面我做一個AJAX調用獲取一些數據。我假設jQuery會從上到下掃描頁面,抓取所有以lblMyLabel開頭的錨標籤,並按順序對它們執行操作,但順序似乎是隨機的。有誰知道這個選擇是如何發生的?

編輯:所以我同意你們都是正確的,它從上到下挑選項目。但是,如果我在WebMethod上響應ajax調用時出現斷點,則不會按照該順序獲取ID。該訂單如何確定?

+0

我相信訂單是從上到下的順序。 –

+1

http://james.padolsey.com/jquery/#v=1.7.2&fn=init這是一個很好的工具來查看jQuery的源代碼。 – Joe

+0

我相信你正在從上到下談話,因爲它們出現在DOM中 – Alexander

回答

4

在這種情況下,在一個現代的瀏覽器,jQuery使用

document.querySelectorAll('a[id^="lblMyLabel"]') 

允許瀏覽器做的工作。

在.prev類似的方法以外的所有其他情況下,jquery按它們出現在文檔中的順序返回元素。

https://developer.mozilla.org/en-US/docs/DOM/Document.querySelectorAll

+1

,似乎它在_深度返回 - 我認爲是順序的文檔節點的第一個預序遍歷。 –

+0

@Vega是的,這是「文檔順序」。 http://www.w3.org/TR/selectors-api/#findelements –

+0

我認爲他的評論是在我添加該行之前。 –

2

DOM元素在這樣創造了一個jQuery對象的順序(因此爲了.each()稱)是由上到文檔中的底部連續的,但如果你然後做了一堆的ajax調用,這些ajax調用的響應不能以任何特定順序保證,因爲這取決於服務器上每個響應的處理時間。

如果你想按順序處理ajax響應,那麼你可能需要給它們中的每一個一些序列標識符,將它們全部排隊並且只在你處理完之前處理了它們之後才處理它。最簡單的方法是將所有結果按照其原始序列號排列在數組中,然後在完成所有結果時按順序處理所有結果。還有更復雜的方法來處理N,一旦所有之前已經到達並處理完畢。

0

你需要選擇CSS ID時,在下面的示例中使用#字符:

VAR messagePara = $( '#消息');

+1

如果您使用我在我的問題中顯示的代碼,它將獲取文檔中每個錨點標記,該標記的ID都以單引號之間的任何內容開頭。在這種情況下你不需要使用#。 – esastincy