2012-05-16 98 views
0

嗯,這個問題讓我很生氣。我認爲我缺乏這方面的知識。jQuery如何定義對象結構?

我想解析一個XML響應,一切正常,但問題是當我嘗試訪問對象。我像對待數組和我總是收到「未定義」:

<?xml version="1.0" encoding="UTF-8" ?> 
    <ajax-response> 
    <response> 
    <item> 
     <name><![CDATA[ok]]></name> 
     <value><![CDATA[true]]></value> 
    </item> 
    <item> 
     <name><![CDATA[menuDiv]]></name> 
     <value><![CDATA[Some HTML value]]></value> 
    </item> 
    </response> 
    </ajax-response> 

這裏是jQuery代碼:

xmlDoc = $.parseXML(xml), 
     $xml = $(xmlDoc), 
     $item = $xml.find("item"); 
     alert($item.length); 
     $item.each(function(key, value){ 
      alert(typeof value);  
     }); 

此行alert(typeof value);返回「對象」。但是,如果我的value[0]$value[0]它返回「未定義」。

我想從對象中獲得「某些HTML值」。

回答

2

傳入您的迭代函數的value對象將是一個XML DOM節點,在您的情況下,標記名稱爲itemElement。因此,您可以通過從中獲取信息或查看其中的任何子文本中的文本來從中檢索信息。

您可以將元素包裝在jQuery實例中,並使用jQuery的attr獲取屬性,並使用text獲取文本。

我想從對象中獲得「某些HTML值」。

這將是text - 這裏有一個例子:

$item.each(function(key, value){ 
    var $value = $(value); 
    alert(typeof $value.text()); 
}); 

下面是通過每個item的孩子迴路一個完整的例子:Live copy | source

jQuery(function($) { 

    var xml = 
     '<?xml version="1.0" encoding="UTF-8" ?>' + 
     '<ajax-response>' + 
      '<response>' + 
       '<item>' + 
        '<name><![CDATA[ok]]></name>' + 
        '<value><![CDATA[true]]></value>' + 
       '</item>' + 
       '<item>' + 
        '<name><![CDATA[menuDiv]]></name>' + 
        '<value><![CDATA[Some HTML value]]></value>' + 
       '</item>' + 
      '</response>' + 
     '</ajax-response>'; 

    var xmlDoc = $.parseXML(xml), 
     $xml = $(xmlDoc), 
     $item = $xml.find("item"); 
    display($item.length); 
    $item.each(function(key, value){ 
    $(value).children().each(function(clave, valor) { 
     display("$(valor).text() = " + $(valor).text()); 
    }); 
    }); 

    function display(msg) { 
    $("<p>").html(msg).appendTo(document.body); 
    } 
}); 

或者,如果你只是想抓住value這就是name的包含文本"menuDiv",相關位是兄弟:

var menuDivText = $xml.find("item name:contains(menuDiv)").next().text(); 

Live example | source

+0

非常感謝!現在我可以訪問另一個實例,但是如何從該對象中獲得「某些HTML值」?因爲這對於我將採用「某些HTML值」的步驟是有用的。 '$ item.each(功能(鍵,值){ \t \t \t $(值)。每個(函數(釜,勇武){ \t \t \t \t警報($(勇氣)的.text:現在我想用()); \t \t \t}); \t \t});'但它返回兩個值:' <![CDATA [OK]]><![CDATA [TRUE]]!> ' –

+0

@LeandroCusack:'$(value).each(...)循環遍歷匹配集合中的每個'item'對象(所以它循環一次)。如果你想循環它的* child *節點,使用'$(value).children()。each(...)'。例如:http://jsbin.com/iwonoq –

+0

謝謝,非常好的答案。問題是這不是聯想,如果是「menuDiv」,我假裝選擇內容。 PHP規則在這方面。 –