2010-06-07 61 views
2

是否有(对用户不显眼)用JavaScript获取页面中所有文本的方式?我可以得到HTML,解析它,删除所有标签等,但我想知道是否有办法从已读页面获取文本。有没有办法从JS呈现的页面中获取所有文本?

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

谢谢!

+0

可能的重复:http://stackoverflow.com/questions/1879477/get-web-page-text-via-javascript – 2013-05-10 19:29:28

回答

3

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

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

当它完成后,“theText”应该包含页面上的大部分文本。添加我可能遗漏的任何相关选择器。

+0

其实,这根本不是一个坏主意,我不认为我会需要这些以外的任何文字...但是,这不会也拿起段落内的链接等? – 2010-06-07 04:06:41

+0

我认为,因为我们使用jQuery的text()方法,它知道为我们去除这些额外的标签。如果我们使用了html()方法,它肯定会携带锚标签。 – 2010-06-07 04:11:20

+0

啊,谢谢你,我会试试。 – 2010-06-07 04:13:01

6

所有信贷Greg W's answer,我根据他的代码,这个答案,但我发现了一个网站没有内嵌样式或脚本标签这是一般简单的使用方法:

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

,因为这抓起所有标签中的所有文本都无需手动设置每个可能包含文本的标签。另外,如果您不小心,手动设置标签会倾向于在输出中创建重复文本,因为每个函数通常都需要检查包含在其他标签中的标签,从而导致它抓取相同的文本两次。使用一个包含我们想要抓取文本的标签的选择器可以避免这个问题。

需要注意的是,如果在身体标签内有嵌入式样式或脚本标签,它也会抓住这些标签。

更新:

阅读this article about innerText后,我觉得现在来获取文本的绝对最好的办法是纯醇香草JS:

document.body.innerText 

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

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

0

作为对Greg W的回答的改进,您也可以删除'undefined',并删除任何数字,因为他们不是这些词语。

function countWords() { 

    var collectedText; 

    $('p,h1,h2,h3,h4,h5').each(function(index, element){ 
     collectedText += element.innerText + " "; 
    }); 

    // Remove 'undefined if there' 
    collectedText = collectedText.replace('undefined', ''); 

    // Remove numbers, they're not words 
    collectedText = collectedText.replace(/[0-9]/g, ''); 

    // Get 
    console.log("You have " + collectedText.split(' ').length + " in your document."); 
    return collectedText; 

} 

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

相关问题