0

抱歉标题含糊。这是我想做的一个例子。

<book>
  The Lord of the Rings
  <author>JRR Tolkien</author>
</book>

$xml.find("book").each(function()
{
  $(this).text();
});

$(this).text(); 不仅返回“指环王”,还返回......以及里面的任何其他节点。我正在寻找一种一致的方式来只返回“指环王”或我在那里的任何信息。

4

3 回答 3

3

您需要使用contents()获取所有节点,然后.filter()删除任何不是文本节点的节点:

$xml.find("book").contents().filter(function() {
    return this.nodeType == Node.TEXT_NODE;
}).each(function() {
    // $(this).text();
});

来源

如果代码也需要在 IE7 中运行,则必须替换Node.TEXT_NODE3.

于 2012-06-16T20:17:00.370 回答
2

可能该文本将始终在标记之前,因此您也可以获取内容的第一个节点

$(xml).find('book').each(function(){
   var text=$(this).contents().eq(0).text();
});

演示:http: //jsfiddle.net/nS5bj/

于 2012-06-16T20:33:15.997 回答
1

您可以克隆元素并删除该克隆的子元素,留下裸文本:

$xml.find("book").each(function()
{
    var title = $(this).clone().children().remove().end().text();
});

这里的使用.end是关键,因为它会终止.remove操作(删除所有子标签),留下剩余的文本。

JSFiddle

于 2012-06-16T20:27:37.557 回答