2

我通过 AJAX 作为 XML 获取一些 POST 数据,并尝试使用 jQuery 将其加载到文本区域中,并且遇到了一些问题。

XML 看起来像这样(精简,仅显示问题元素):

<Entry>
    <Title>A <i>Title</i> with italics.</Title>
    <Abstract>An abstract, which <i>also</i> may have italics</Abstract>
</Entry>

我已经使用 将这个 XML 转换为一个 jQuery 对象,上面的 XML 字符串$dom = $(xml)在哪里。xml出于某种原因,jQuery 似乎.text()与 vs不一致.html()。我认为问题与 HTMLCollection (这是对象显示的日志记录)有关,但我不确定。

$dom.find('Title').text();按我的意愿工作,将标题变成“ A <i>Title</i> with italics。” 对摘要 ( ) 执行相同操作会完全$dom.find('Abstract').text()剥离<i>标签,从而产生“ An abstract, which also may have italics”。

令人沮丧的是,做事.html()也不一致!

$dom.find('Title').html();    #=> 'A &lt;Title&gt;, with italics'
$dom.find('Abstract').html()  #=> 'An abstract, which <i>also</i> may have...'

关于问题是什么的任何想法?XML 是无类型的,但我认为这不会产生影响。谢谢!

4

1 回答 1

2

正如您所说html(),不适用于 XML <title>.text()因为它是一个已知的 DOM 元素,所以将标签重命名为其他内容,内部 HTML 将与<abstract>.

您可以将包含 HTML 的节点值包含在 CDATA 部分中并使用parseXML();

var xml = "<Entry><Title><![CDATA[A <i>Title</i> with italics.]]></Title><Abstract><![CDATA[An abstract, which <i>also</i> may have italics]]></Abstract></Entry>";

$dom = $($.parseXML(xml));
alert( $dom.find('Title').text() );
alert( $dom.find('Abstract').text() );
于 2013-01-23T17:54:46.710 回答