我正在尝试在以下 Gulp 任务中使用 Cheerio 计算 HTML 页面的字数:
gulp.task("html", () => {
try {
return gulp.src(folder.src + "html/**/*.html")
.pipe(preprocess())
.pipe(htmlmin({
collapseWhitespace: true,
removeComments: true,
minifyCSS: true,
minifyJS: true
}))
.pipe(cheerio(function ($, file) {
try {
const text = $("body").children(":not(header, footer, script)").text();
const words = text.split(/\s+/).filter(word => word.length > 0)
const wordCount = words.length;
const filename = file.relative;
if (filename == "clients.html") {
console.log(words);
}
console.log(wordCount, filename);
} catch (error) {
console.error(error);
}
}))
.pipe(gulp.dest(folder.build));
} catch (error) {
console.warn("Error parsing HTML: ", error);
}
});
虽然这有效,但我遇到了单词未正确拆分的问题。例如,我得到如下结果:
[
'Our', 'Valued', 'ClientsAt',
'Zubizi', 'Web', 'Solutions,'
]
问题似乎出在“clientsAt”这个词上,它应该分成两个单独的词(“Clients”和“At”),但相反,它们被组合在一起。
这是我正在使用的 HTML 片段:
<h1 class="text-3xl font-bold mb-3">Our Valued Clients</h1>
<p class="text-lg mb-5">
At Zubizi Web Solutions,
...
如您所见,文本“ClientsAt”未正确分割。我该如何解决这个问题?
注意:我正在尝试在编译过程中进行关键字分析。
(警告:我既没有运行你的代码也没有完全测试下面的代码)
您似乎遇到了此问题中报告的相同行为:How to get the text of multiple elements split by delimiter using jQuery?
如果该评估准确,则可能会使用如下代码(改编自该问题的已接受答案)
const text = $("body").children(":not(页眉、页脚、脚本)").map(function(){return $(this).text()}).get().join( '')
基本上,这个想法是在不同元素的文本之间散布一个空格;根据您当前的方法,通过调用 .text() 可以在没有分隔符的情况下连接该内容。