使用cherrio从段落标记(<p>)中选择没有类

时间:2016-05-13 19:20:20

标签: node.js cheerio jsdom

我正在使用cheerio(cheeriojs)从具有以下HTML布局的网站中删除内容。

<div class="foo"></div>
<p></p>
<p>
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do  eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
<br><br>
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
<br><br>
</p>

我可以使用文档(here)中的每个函数来遍历此内容,方法是遍历DOM,查找“.foo”类。

$('.foo').each(function(i, el){
 //Do something...
 $(this).next().next().text()
 }

从这里我可以简单地将这个内容转换为字符串,并按照我的意愿进行检索,但是文本会在一个未格式化的长字符串中返回。 (即段落的长篇文章,各段之间没有间隔)。有没有办法,技巧我可以在保留格式化内容的同时检索内容?

我尝试过以下几点;

      `var fruits = [];

        $('.foo').each(function(i, el){
            fruits[i] = $(this).next().next().text();
      }` 

作为获取当前标记并将其推送到数组的一种方法,但这与我之前的代码没有太大区别。我假设如果<br>标签有一些id或类,那么这是可能的,但是他们没有。有没有一种方法可以直接将这些(<br>)作为获取文本的方法,并以适当的格式(即段落之间的间距)检索它。在这个交汇点,我必须问那些更熟悉并且经历过cheerio的人,如果我想用这个特殊的现金做什么甚至可以用cheerio?我愿意继续寻求其他途径,并欢迎推荐有助于使这项工作更轻松的模块/库。

回顾一下:我想检索第二个<p>代码之间的所有文字,维护呈现的HTML上显示的格式和间距。

提前致谢。

1 个答案:

答案 0 :(得分:3)

如果您要求.text(),它将删除格式。如果您要求.html(),则会返回所有内容,并保留所有标记。

所以改变这个:

fruits[i] = $(this).next().next().text();

对此:

fruits[i] = $(this).next().next().html();