jQuery - 从复杂的html页面

时间:2016-05-30 09:53:37

标签: jquery text

我的jQuery AJAX客户端与API通信,后者通常返回JSON,但在某些情况下,会返回一个复杂,漂亮,人类可读的网页。

出于调试目的,我想记录这些案例,只保存页面中的文本。我认为这将是一个微不足道的$(result).text(),但这似乎也保留了很多非文本组件,特别是样式表引用的内容。

例如:

$('<html>Some text<style>body { height: 100%;}</style><script type="text/javascript">function f() { return 42;}</script>some more text</body></html>').text();

给出

"Some textbody { height: 100%;}function f() { return 42;}some more text"

我希望看到

"Some textsomemore text"

第二个例子(稍后编辑),因为这需要递归搜索:

<html>abc<script>f=3;</script><div>def<script>g=7</script>ghi</div></html>

应该返回:

"abcdefghi"

没有f=3g=7

获取文本的最简单方法是什么?我不需要这个是完美的,也不需要处理毛边的情况;只是不要用数百行JavaScript和CSS充斥我的日志。

= - = - = - =

注意:接受的答案适用于许多情况,但不是全部;看到我对它的评论。目前还不清楚这个问题是否与jQuery版本有关,这在Chrome扩展程序中有些奇怪,或者很可能是在我的环境中搞砸了。失败上下文的症状是,如果匹配元素嵌套在其他元素中,则过滤器不会删除匹配元素。

1 个答案:

答案 0 :(得分:2)

您可以过滤您不希望参与文字提取的元素,例如&#34;脚本,样式&#34;等

试试这个:

var str1 = '<html>Some text<style>body { height: 100%;}</style><script type="text/javascript">function f() { return 42;}</script>some more text</body></html>';
var str2 = '<html>abc<script>f=3;</script><div>def<script>g=7</script>ghi</div></html>';

function extractText(htmlString){
    return $(htmlString).filter(function(i, elm){ 
        return !$(elm).is("script, style");
    }).text();
}

console.log(extractText(str1)); // "Some textsome more text"
console.log(extractText(str2)); // "abcdefghi"