jQuery如何定义对象结构?

时间:2012-05-16 13:26:00

标签: jquery object xml-parsing

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

我正在尝试解析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);返回“object”。但是,如果我执行value[0]$value[0],则会返回“未定义”。

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

1 个答案:

答案 0 :(得分:2)

传递到迭代函数的value对象将是一个XML DOM节点,在您的情况下为Element,标记名为item。因此,您可以通过从中获取属性或查看其中的任何子TextNode中的文本来从中检索信息。

您可以将元素包装在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的{​​{1}}的兄弟,相关位是:

"menuDiv"

Live example | source