2012-05-16 54 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规则在这方面。 –