0

嗯,这个问题让我很生气。我认为我在这方面缺乏知识。

我正在尝试解析 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 值”。

4

1 回答 1

2

传递给您的迭代函数的value对象将是一个 XML DOM 节点,在您的例子中是一个Element带有标签 name的节点item。因此,您可以通过从中获取属性或查看TextNode它拥有的任何 child 中的文本来从中检索信息。

您可以将元素包装在 jQuery 实例中,并使用 jQueryattr获取属性和text文本。

我想从对象中获取“一些 HTML 值”。

那将是text-这是一个示例:

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

这是一个完整的示例,循环遍历每个的子级itemLive copy | 来源

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);
  }
});

或者,如果您只想获取包含 textvalue的兄弟,相关位是:name"menuDiv"

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

实例| 来源

于 2012-05-16T13:28:03.247 回答