2013-01-23 103 views
2

我收到一些POST数据通过AJAX作为XML,并试图使用jQuery将它加载到textarea中,并且遇到了一些问题。jQuery HTMLCollection,标签剥离

的XML看起来像这样(剥离下来,仅示出该问题的元素):

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

我已经转换这个XML成使用$dom = $(xml) jQuery对象,其中xml是上述XML字符串。出于某种原因,jQuery似乎不符合.text().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是无类型的,但我认为这不应该有所作为。谢谢!

回答

2

至于你说html()不会.text()使用XML & <title>作品,因为它的一个已知的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()); 
+1

我在吃午饭时有一种认识,它可能与Title是一个HTML元素有关。 CDATA帮助很多...谢谢! –