我在XML文档中有一个引号列表。每个报价都包含这样:
<Item>
<Quote>This is a quote!</Quote>
<Source>-- this is the Source of the Quote!</Source>
</Item>
这是jQuery:
var html = '';
var tmpl = '<li class=""><p class="quote">__quote</p><p class="source">__source</p></li>';
$(quoteObj).find('Item').each(function(){
$that = $(this);
var _quote = $that.children('Quote').text();
var _source = $that.children('Source').text();
var qhtml = tmpl.replace('__quote', _quote).replace('__source', _source);
html += qhtml;
});
return html;
在最终产品中,QUOTES
都在那里,但SOURCES
却没有。我不能为我的生活找出原因。在我面前,我看不到什么?
回答评论的其他信息:
var tmpl
行来显示我在循环中替换的内容。 __quote
正在被替换,__source
至少会被采取行动,因为第二个<p>
是空的,而不是包含字符串。在我看来,这是与范围和this
或.children()
方法的操作有关的某种问题,但我仍然无法找到它。
最后一次注意:
将XML标记大小写更改为Initial Caps,它位于相关文档中。
答案 0 :(得分:3)
jQuery不解析XML。将XML字符串传递给$()
只需将字符串指定为元素的innerHTML
属性,该元素具有可变且不可预测的结果。您需要使用浏览器的内置XML解析器自己解析XML,然后将生成的文档传递给jQuery:
var parseXml;
if (window.DOMParser) {
parseXml = function(xmlStr) {
return ( new window.DOMParser() ).parseFromString(xmlStr, "text/xml");
};
} else if (typeof window.ActiveXObject != "undefined" && new window.ActiveXObject("Microsoft.XMLDOM")) {
parseXml = function(xmlStr) {
var xmlDoc = new window.ActiveXObject("Microsoft.XMLDOM");
xmlDoc.async = "false";
xmlDoc.loadXML(xmlStr);
return xmlDoc;
};
} else {
parseXml = function() { return null; }
}
var xmlStr = "<Item><Quote>This is a quote!</Quote><Source>-- this is the Source of the Quote!</Source></Item>";
var xmlDoc = parseXml(xmlStr);
$xml = $(xmlDoc);
$xml.find('Item').each(function() {
// Do stuff with each item here
alert("Item");
});
答案 1 :(得分:1)
试过这个,我唯一需要改变的是find
行以匹配XML节点的情况,例如
$(quoteObj).find('ITEM').each( function() {
我还更改了$that
分配行以包含var
关键字,但在我执行此操作之前它已经正常工作
var $that = $(this);