嗯,这个问题让我很生气。我认为我在这方面缺乏知识。
我正在尝试解析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值”。
答案 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"