2015-09-13 163 views
-1

我需要通過querySelectorAll函數獲取元素的幫助。 當我打電話給它時,我傳遞一個字符串作爲這個函數的參數,多個元素之間用逗號分隔,它將帶有節點return me NodeList,但它們排序爲first-depth traversal pre-order(應該像它們位於document body中那樣)。當我想調用method返回保存在Array中的document中更多元素的值時,我遇到問題。所以我把這個JavaScript querySelectorAll元素順序

$('#textinput, #someotherinput').value(); 

其中具有id #someotherinput元件定位元素#textinput以上,但querySelectorAll後的結果是這樣的:

[input#someotherinput, input#textinput] 
    0: input#someotherinput 
    1: input#textinput 
    length: 2 
    __proto__: NodeList 

,我需要對它們進行排序方式,我沒有當我叫$() ,因爲當我需要使用值時,我只看到$('#textinput, #someotherinput'),並且在document body中找到元素的順序並且使用帶有這些元素的值的返回數組時,我不知道第一個(第0個)元素中保存的是什麼,陣列中的位置。是的,我知道querySelectorAlltraversal pre-order函數。那麼,如何對我的訂單進行排序(儘可能簡單)?

+0

如果一個選擇器找到多個元素,或者多個選擇器找到一個元素,該怎麼辦?那些如何排序? – Guffa

+0

如果多個選擇器找到一個元素,則順序無關緊要。我認爲這將按排序的屬性排序。因此''input type =「text」id =「idselector」class =「classSelector」/>'我調用'$('。classSelector,#idselector')'querySelectorAll'的結果是nodeList,其中包含'input#idselector '在第0個位置 – Peter

+0

節點按文檔順序返回。該算法是下降文檔樹,根據選擇器測試每個節點。如果節點匹配其中的任何節點,則將其添加到列表中。選擇器實際上是「*選擇具有textinput或其他輸入ID的元素」,因此選擇器的順序不會影響返回節點的順序。哦,並且一個NodeList不是一個數組。 – RobG

回答

0

有沒有簡單的方法來確定一個元素是否會被選擇器匹配。你將不得不重新實現整個規則匹配系統,所以最簡單的方法就是簡單地使用選擇器來查詢元素。

按照您喜歡的順序獲取元素的最簡單方法是將選擇器拆分爲子查詢器,對每個子查詢器進行查詢,然後通過消除重複的元素引用將結果放在一起。