假设我得到以下XML结构:
<root>
<item>
<item1>text1</item1>
<item2>text2</item2>
more text here
</item>
</root>
“此处更多文本”是一个文本节点,与层次结构中的其他数据节点处于同一级别,但似乎无法访问。
有没有办法使用jQuery函数提取上面显示的文本节点?
答案 0 :(得分:6)
我想出了同样的解决方案:
var xml = $("<root><item1>text1</item1><item2>text2</item2>more text here</root>");
alert($(xml).contents().empty().end().text());
答案 1 :(得分:4)
因此,我提出的解决方案是删除item1和item2节点,只留下文本:
$(responseXML).find('item').each(function(){
var item1_text = $(this).find('item1').text();
var item2_text = $(this).find('item2').text();
$(this).contents().empty(); //removes the other nodes
var extra_text = $(this).text();
}
答案 2 :(得分:4)
使用contents()函数。例如,如果您有一个XML片段,如:
var root = $('<root><item1>text1</item1><item2>text2</item2>more text here</root>');
然后你可以通过以下方式获取文本:
var txt = root.contents()[2]
假设文本节点始终是&lt; root&gt;的第3个子节点。否则,如果您不知道位置,或者可能有一个包含多个文本节点的节点,则应通过过滤收集所有文本节点:
var textList = root.contents().filter(function() { return this.nodeType == 3; });
这将返回XML片段中的文本节点数组。要获取列表中的字符串,只需访问数组切片:
var txt = textList[0];
答案 3 :(得分:0)
这将获得正确的根/文本值。文本可以放在根节点的任何位置。
<script type="text/javascript">
$().ready(function() {
var xml = $('#xml').find('root').contents().each(function(i){
if (this.nodeName=="#text" && this.nodeType=="3" && this.nodeValue.length>2) alert(this.nodeValue);
});
});
</script>
有:
<div id="xml"><root><item1>text1</item1><item2>text2</item2>more text here</root></div>
注意:“inline”xml在Internet Explorer中不起作用,但如果您在示例中将root和itemX替换为有效的Html节点名称,它也会起作用。
说明:DOM将空节点和文本节点视为元素。如果你调试上面的.each(),你会看到以下内容:
alert( this.nodeName + '|' + this.nodeType + "|" + this.nodeValue);
#text|3| , ITEM1|1|null , #text|3| , ITEM2|1|null , #text|3| more text here
(抱歉,格式化无法使用匈牙利语键盘)