有没有办法从JS渲染页面获取所有文本?

时间:2010-06-07 03:57:39

标签: javascript text text-extraction

是否有(不显眼的,用户)方式使用Javascript获取页面中的所有文本?我可以获取HTML,解析它,删除所有标签等,但我想知道是否有办法从alread渲染页面获取文本。

为了澄清,我不想从选择中获取文本,我想要整个页面。

谢谢!

3 个答案:

答案 0 :(得分:7)

所有归功于Greg W's answer,因为我的答案基于他的代码,但我发现对于没有内联样式或脚本标记的网站,它通常更简单易用:

var theText = $('body').text();

因为这会抓取所有标签中的所有文本,而无需手动设置可能包含文本的每个标签。

另外,如果你不小心,手动设置标签有可能在输出中创建重复的文本,因为每个函数通常必须检查其他标签中包含的标签,这导致它抓取相同的文本两次。使用一个包含我们想要抓取文本的所有标记的选择器可以解决这个问题。

需要注意的是,如果body标签中有内联样式或脚本标签,它也会抓住它们。

更新

阅读this article about innerText后,我现在认为获取文本的绝对最佳方式是普通的ol vanilla js:

document.body.innerText

原样,这不是可靠的跨浏览器,但在受控环境中它会返回最佳结果。阅读文章了解更多详情。

此方法以通常更易读的方式格式化文本,在输出中包含样式或脚本标记内容。

答案 1 :(得分:3)

如果你不介意加载jQuery,我想你可以做这样的事情。

var theText;
$('p,h1,h2,h3,h4,h5').each(function(){
  theText += $(this).text();
});

完成所有操作后,“theText”应包含页面上的大部分文字。添加我可能遗漏的任何相关选择器。

答案 2 :(得分:0)

作为对Greg W答案的改进,您还可以删除“未定义”,并删除任何数字,因为它们不是单词。

u

这可以分成一个单词数组,一个单词数;无论如何,真的。