使用jQuery获取没有被标签包裹的文本内容

其实这个问题是我在使用cheerio的时候遇到的,cheerio是在 node 中使用的用来操作 dom 文档的一个库,使用方法和 jQuery 是一样的,属于 jQuery 的子集,所以此问题也适用于 jQuery。在使用 node 做爬虫的时候,经常会遇到一些文本内容是没有被标签包裹的,由于没有被标签包裹,cheerio就无法直接操作该文本,那么该怎么办呢。

进入正题

先看下面的 HTML 片段:

1
2
3
4
5
6
<div>
<p>
内容一
<span>内容二</span>
</p>
</div>

我们需要获取“内容一”而不需要“内容二”,那么该如何操作呢。

单纯的使用p.text()方法是没有办法实现的,因为这样会获取到p标签下面包含子节点的所有文本内容。

解决办法很简单,先看下面的代码:

1
2
3
var obj = $("div").children("p").clone();
obj.find(':nth-child(n)').remove();
console.log(obj.text());

在这段代码里,我们先将p标签及其子节点克隆了一份(克隆的原因是为了不影响原来的 dom 结构),然后将p标签下面的子节点全部删除,因为“文本一”没有被标签包裹,所以就被保留下来了。

这样一来就获取到了没有被子节点包裹的文本内容了