JQuery XML有.text()只返回当前节点文本

时间:2012-06-16 20:14:37

标签: jquery xml

对于模糊的标题,我们深表歉意。这是我想要做的一个例子。

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

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

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

3 个答案:

答案 0 :(得分:3)

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

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

Source

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

答案 1 :(得分:2)

可能文本总是在标记之前,所以你也可以抓住第一个内容节点

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

DEMO:http://jsfiddle.net/nS5bj/

答案 2 :(得分:1)

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

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

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

JSFiddle