Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
jQuery-仅从复杂的html页面中提取文本_Jquery_Text - Fatal编程技术网

jQuery-仅从复杂的html页面中提取文本

jQuery-仅从复杂的html页面中提取文本,jquery,text,Jquery,Text,我的jQueryAjax客户端与一个API接口,该API通常返回JSON,但在某些情况下,返回一个复杂、漂亮、可读的网页 出于调试目的,我想记录这些情况,只保存页面中的文本。我认为这将是一个微不足道的$(result).text(),但这似乎也保留了许多非文本组件,特别是样式表引用的内容 例如: $('Some textbody{height:100%;}函数f(){return 42;}Some more text').text() 给予 “一些文本体{height:100%;}函数f(){r

我的jQueryAjax客户端与一个API接口,该API通常返回JSON,但在某些情况下,返回一个复杂、漂亮、可读的网页

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

例如:

$('Some textbody{height:100%;}函数f(){return 42;}Some more text').text()

给予

“一些文本体{height:100%;}函数f(){return 42;}一些其他文本”

我想去哪里看

“一些文本更多文本”

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

abcf=3;defg=7ghi

应返回:

“abcdefghi”

没有
f=3
g=7

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

=-=-=-=


注:公认的答案适用于许多情况,但并非所有情况;请看我对它的评论。目前还不清楚问题是否与jQuery版本有关,是否与Chrome扩展中的一些奇怪的东西有关,或者很可能与我的环境中的一些混乱有关。失败上下文的症状是,如果匹配元素嵌套在其他元素中,则筛选器不会删除它们。

您可以筛选不希望参与文本提取的元素,如“脚本、样式”等

试试这个:

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"
var str1='Some textbody{height:100%;}函数f(){return 42;}Some more text';
var str2='abcf=3;defg=7ghi';
函数提取文本(htmlString){
返回$(htmlString).filter(函数(i,elm){
return!$(elm).is(“脚本,样式”);
}).text();
}
console.log(extractText(str1));//“一些文本更多文本”
console.log(extractText(str2));//“abcdefghi”

您可以筛选不希望参与文本提取的元素,如“脚本、样式”等

试试这个:

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"
var str1='Some textbody{height:100%;}函数f(){return 42;}Some more text';
var str2='abcf=3;defg=7ghi';
函数提取文本(htmlString){
返回$(htmlString).filter(函数(i,elm){
return!$(elm).is(“脚本,样式”);
}).text();
}
console.log(extractText(str1));//“一些文本更多文本”
console.log(extractText(str2));//“abcdefghi”

$(result).text()
应该可以做到这一点,但如果这仍然返回HTML内容,则有可能是HTML编码的文本。试试
$($(结果)).text()
不,谢谢。这没有帮助。我将编辑我的问题,以给出一个示例来说明我的意思。
$(result).text()
应该可以做到这一点,但如果这仍然返回HTML内容,则可能会出现HTML编码的文本。试试
$($(结果)).text()
不,谢谢。这没有帮助。我将编辑我的问题,以举例说明我的意思。这很接近,但不能捕获所有内容,因为过滤器不会递归搜索。例如:$($abcf=3;defg=7ghi”).filter(函数(i,e){return!$(e).is('script');}.text()“abcdefg=7ghi”我将把它编辑到我的问题中,因此它比这里更可读。这在两种条件下都有效。虽然我已经编辑了代码,将其包含在函数中,但您能再次测试吗。。。但不管怎么说,这正是你想要的我的错误;不知道是什么把我骗了,对不起。您的代码适用于我给出的两个案例,但不适用于我简化的真实案例。我现在正试图建立一个适当的小失败案例。现在我真的很困惑!!您的代码在常规的Chrome控制台上100%运行良好,无论是在str2还是在我的长原始示例上。但是,当我在Chrome扩展的控制台窗口中进行测试时,我得到str2的abcdefg=7ghi。这很接近,但不能捕获所有内容,因为过滤器不会递归搜索。例如:$($abcf=3;defg=7ghi”).filter(函数(i,e){return!$(e).is('script');}.text()“abcdefg=7ghi”我将把它编辑到我的问题中,因此它比这里更可读。这在两种条件下都有效。虽然我已经编辑了代码,将其包含在函数中,但您能再次测试吗。。。但不管怎么说,这正是你想要的我的错误;不知道是什么把我骗了,对不起。您的代码适用于我给出的两个案例,但不适用于我简化的真实案例。我现在正试图建立一个适当的小失败案例。现在我真的很困惑!!您的代码在常规的Chrome控制台上100%运行良好,无论是在str2还是在我的长原始示例上。但是,当我在Chrome扩展的控制台窗口中进行测试时,我得到str2的abcdefg=7ghi。