我的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=3
或g=7
。
获取文本的最简单方法是什么?我不需要这个是完美的,也不需要处理毛边的情况;只是不要用数百行JavaScript和CSS充斥我的日志。
= - = - = - =
注意:接受的答案适用于许多情况,但不是全部;看到我对它的评论。目前还不清楚这个问题是否与jQuery版本有关,这在Chrome扩展程序中有些奇怪,或者很可能是在我的环境中搞砸了。失败上下文的症状是,如果匹配元素嵌套在其他元素中,则过滤器不会删除匹配元素。
答案 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"