2010-06-02 76 views
1

我試圖解析使用jQuery一些XML數據,並且因爲它代表我已經提取所需的節點「id」屬性,並將它們存儲在一個數組,現在我想運行爲每個數組成員創建一個循環,並最終從特定於每個ID的筆記中獲取更多屬性。遇到問題解析XML使用jQuery

問題目前是一旦我到了「for」循環,它不是循環,我想我可能沒有正確寫入的XML路徑數據。它運行一次,我收到'alert(arrayIds.length);'只有一次,如果我刪除後續的XML路徑代碼,它只循環正確的次數。

這裏是我的功能:

var arrayIds = new Array(); 
$(document).ready(function(){ 
    $.ajax({ 
    type: "GET", 
    url: "question.xml", 
    dataType: "xml", 
    success: function(xml) 
    { 
        $(xml).find("C").each(function(){ 
         $("#attr2").append($(this).attr('ID') + "<br />"); 
         arrayIds.push($(this).attr('ID')); 
        }); 

        for (i=0; i<arrayIds.length; i++) 
        { 
        alert(arrayIds.length); 
        $(xml).find("C[ID='arrayIds[i]']").(function(){ 
         // pass values 
         alert('test'); 
        }); 
        } 
    } 
    }); 
}); 

任何想法?

回答

1

此行是無效的。你錯過了一個函數名。這是崩潰的腳本。

$(xml).find("C[ID='arrayIds[i]']").(function(){ 

應該是(也許):

$(xml).find("C[ID='" + arrayIds[i] + "']").each(function(){ // Note the added each 
+0

你的建議確實導致'alert(arrayIds.length)''循環並運行正確的次數,然而'alert('test');'內部函數內部因某種原因未執行。 – 2010-06-02 15:26:29

+0

您的選擇器也不正確。我會更新我的答案。 – user113716 2010-06-02 15:28:13

+0

Matthews最新版本似乎解決了這個問題。儘管非常感謝您的幫助。 – 2010-06-02 15:36:24

1

它應該是:

$(xml).find("*[ID=" + arrayIds[i] + "]").each(function(){ 
    // pass values 
    alert('test'); 
}); 

之前,你正在尋找與文字值 「arrayIds [I]」 的ID。另外,ids是唯一的,所以你不需要C,我將它改爲標準的jQuery語法。另外,正如帕特里克所說,你錯過了每一個。

+0

ammending我的代碼對你的建議之後,在行爲上沒有變化,我的錯誤控制檯提示我「XML過濾器適用於非XML值......「。 補充:我已經添加了「每個」,這再次像帕特里克的回答導致循環正常運行,但我仍然有執行循環內的函數觸發第二警報麻煩。 任何想法? 我不是很熟悉這個錯誤。 – 2010-06-02 15:26:05

+0

''#'+ arrayIds [i]'依靠分析器知道名爲'ID'的屬性應該是模式類型'ID'。對於HTML文檔將是這種情況,但對於XML,它通常不會。 '[ID = ...]'屬性選擇器*是必需的。 – bobince 2010-06-02 15:27:44

+0

謝謝@bobince。我的錯。 – 2010-06-02 15:29:40