2013-01-23 26 views
0

因此,這裏的處理:我試圖從一個已經存在的NodeList中檢索一個NodeList對象。這裏有一個簡單的XML例子:無法從JavaScript中的NodeList中檢索子NodeList

<products> 
    <category> 
    <name>Category A</name> 
    <product> 
     <code>1</code> 
     <name>Product 1 Category A</name> 
     <price>10.0</price> 
    </product> 
    <product> 
     <code>2</code> 
     <name>Product 2 Category A</name> 
     <price>20.0</price> 
    </product> 
    </category> 
    <category> 
    <name>Category B</name> 
    <product> 
     <code>3</code> 
     <name>Product 1 Category B</name> 
     <price>5.0</price> 
    </product> 
    ... 
    </category> 
</products> 

正如你所看到的,標籤的名字出現了兩次,一次是作爲類的子節點,再作爲產品的一個子節點。我只想檢索產品名稱。既然不能從XML文件中讀取,而是接受它作爲一個字符串,這是我的解析功能:

function parseXML(xmlString) { 
    var parser = new DOMParser(); 
    var xmlDoc = parser.parseFromString(xmlString, "text/xml"); 
    var products = xmlDoc.getElementsByTagName("product"); 
    var names = products.tags("name"); //Here's my problem 
    for(var i = 0; i < names.length; i++){ 
     var element = names[i]; 
     var name = element.firstChild; 
     $('#div_products').append(name.data + "<br>"); 
    } 
    $('#div_main').html($('#div_products').html()); 
}  

這是我用什麼作爲參考:http://help.dottoro.com/ljtrjxbf.php。然而,使用nodeListObject.tags(「tag」)會產生以下錯誤:

processMessage failed: Stack: TypeError: Object #<a NodeList> has no method 'tags' 

我試過不同的方法,但沒有任何工作。即使

var names = products["name"]; 

返回「不確定」,這不會在任何情況下,工作對我來說,因爲文檔中說,除了IE,它會只返回第一個節點, A)我與Android合作/ Cordova和 B)無論如何,節點中沒有屬性「名稱」。

那麼我該如何解決這個問題呢?我想我可以嘗試從產品NodeList創建一個新的XMLDocument對象,但我沒有看過它,因爲它必須有一個更簡單的方法來解決這個問題。

+1

您的參考頁面似乎有點混亂......無論如何,'tags'是由'document.all'返回的nodelist中的一個方法,並且非常非常非常特定於IE。 ['MDN:NodeList'](https://developer.mozilla.org/en-US/docs/DOM/NodeList)。 – Teemu

+0

我明白了。你有更好的參考頁面推薦?此外,有沒有辦法從另一個NodeList通過引用一個標籤除了這個標籤方法來檢索一個NodeList? 編輯:沒關係,現在我意識到你已經發布了一個鏈接。我要檢查一下。 – makoshichi

+1

您可以按元素迭代nodelist元素,並從您需要的每個元素創建一個新的節點列表。 MDN是相當不錯的參考,只需點擊主菜單中的「文檔」,就可以找到更多主題。 – Teemu

回答

1

謝謝Teemu,我在我的Javascript代碼中設法實現了我想要的一些調整。我將它張貼在這裏,這樣也許有人可能會發現它在未來有幫助的:

function parseXML(xmlString) { 
    var NAME = 5; 
    var parser = new DOMParser(); 
    var xmlDoc = parser.parseFromString(xmlString, "text/xml"); 
    var products = xmlDoc.getElementsByTagName("product"); 

    for(var i = 0; i < products.length; i++){ 
     var nodeList = produtos[i].childNodes; 
     $('#div_products').append(nodeList[NAME].textContent + "<br>"); 
    } 

    $('#div_main').html($('#div_products').html()); 
} 

請注意,5是DOM TextNode的,我想(產品名本身)的指數,因此:

var NAME = 5; 

這就是全部。