假设我有以下内容:
$ = cheerio.load('<html><body><ul><li>One</li><li>Two</li></body></html>');
var t = $('html').find('*').contents().filter(function() {
return this.type === 'text';
}).text();
我明白了:
OneTwo
而不是:
One Two
如果我$('html').text()
,我得到的结果相同。基本上我需要的是注入像(空格)或
\n
注意:这不是一个jQuery前端问题,更像是与Cheerio和HTML解析相关的NodeJS后端问题。
答案 0 :(得分:9)
这似乎可以解决问题:
var t = $('html *').contents().map(function() {
return (this.type === 'text') ? $(this).text() : '';
}).get().join(' ');
console.log(t);
结果:
One Two
稍微改进了我的解决方案:
var t = $('html *').contents().map(function() {
return (this.type === 'text') ? $(this).text()+' ' : '';
}).get().join('');
答案 1 :(得分:3)
您可以使用TextVersionJS包生成html字符串的纯文本版本。您也可以在浏览器和node.js中使用它。
var createTextVersion = require("textversionjs");
var yourHtml = "<h1>Your HTML</h1><ul><li>goes</li><li>here.</li></ul>";
var textVersion = createTextVersion(yourHtml);
从npm下载并以Browserify为例。
答案 2 :(得分:0)
您可以使用以下功能从由whitespace
分隔的html中提取文本:
function extractTextFromHtml(html: string): string {
const cheerioStatic: CheerioStatic = cheerio.load(html || '');
return cheerioStatic('html *').contents().toArray()
.map(element => element.type === 'text' ? cheerioStatic(element).text().trim() : null)
.filter(text => text)
.join(' ');
}