Cheerio 从 .text() 获取内容,包括 breaks 和 H 标签
Cheerio get content including the breaks and H tags from .text()
有没有办法使用包含一些 html 标签的 Cheerio 从 html 输出文本?我知道 .html()
输出完整的 html,但我只想要使用 .text()
但包含所有 H 标记和中断的文本?
示例:
<div class="className"><h1>Something here</h1></br><p>Next line text</p></div>
应该输出:
<h1>Something here</h1></br>Next line text
编码我现在拥有的:
const $ = await fetchHTML(thisEntry.link);
const content = $(`div[class='${feedDiv}']`).text()
只输出 div 的文本,没有任何 alinea 中断或 H1 标签。 .text()
默认也输出 <img>
标签。
更新
我正在尝试执行评论中讨论的修剪功能,但仍然无法正常工作...我是否忽略了什么?
async function fetchHTML(url) {
const { data } = await axios.get(url);
return cheerio.load(data, { decodeEntities: false });
}
async function createFeed(feedConfig, entries) {
const $ = await fetchHTML(thisEntry.link);
$(function () {
function clean(o, h) {
var results = '';
if (h == undefined) {
results = o.text().trim();
} else {
$(o)
.children()
.each(function (i, el) {
if (h.indexOf($(el).prop('nodeName').toLowerCase()) >= 0) {
console.log('Found', $(el).prop('nodeName'));
results += $(el).prop('outerHTML');
} else {
console.log($(el).text().trim());
results += $(el).text().trim();
}
});
}
return results;
}
$(".className").html(clean($(".className"), ["h1", "br"]));
});
console.log($.text().trim());
}
控制台什么都不输出
您可以制作自己的 Trim 样式函数。输入要保留的对象和元素。
示例:
$(function() {
function clean(o, h) {
var results = "";
if (h == undefined) {
results = o.text().trim();
} else {
$(o).children().each(function(i, el) {
if (h.indexOf($(el).prop("nodeName").toLowerCase()) >= 0) {
console.log("Found", $(el).prop("nodeName"));
results += $(el).prop("outerHTML");
} else {
console.log($(el).text().trim());
results += $(el).text().trim();
}
});
}
return results;
}
$(".className").html(clean($(".className"), ["h1", "br"]));
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="className">
<h1>Something here</h1>
</br>
<p>Next line text</p>
</div>
这里有一个陷阱,如果有原始文本,它也可能会被剥离。
有没有办法使用包含一些 html 标签的 Cheerio 从 html 输出文本?我知道 .html()
输出完整的 html,但我只想要使用 .text()
但包含所有 H 标记和中断的文本?
示例:
<div class="className"><h1>Something here</h1></br><p>Next line text</p></div>
应该输出:
<h1>Something here</h1></br>Next line text
编码我现在拥有的:
const $ = await fetchHTML(thisEntry.link);
const content = $(`div[class='${feedDiv}']`).text()
只输出 div 的文本,没有任何 alinea 中断或 H1 标签。 .text()
默认也输出 <img>
标签。
更新 我正在尝试执行评论中讨论的修剪功能,但仍然无法正常工作...我是否忽略了什么?
async function fetchHTML(url) {
const { data } = await axios.get(url);
return cheerio.load(data, { decodeEntities: false });
}
async function createFeed(feedConfig, entries) {
const $ = await fetchHTML(thisEntry.link);
$(function () {
function clean(o, h) {
var results = '';
if (h == undefined) {
results = o.text().trim();
} else {
$(o)
.children()
.each(function (i, el) {
if (h.indexOf($(el).prop('nodeName').toLowerCase()) >= 0) {
console.log('Found', $(el).prop('nodeName'));
results += $(el).prop('outerHTML');
} else {
console.log($(el).text().trim());
results += $(el).text().trim();
}
});
}
return results;
}
$(".className").html(clean($(".className"), ["h1", "br"]));
});
console.log($.text().trim());
}
控制台什么都不输出
您可以制作自己的 Trim 样式函数。输入要保留的对象和元素。
示例:
$(function() {
function clean(o, h) {
var results = "";
if (h == undefined) {
results = o.text().trim();
} else {
$(o).children().each(function(i, el) {
if (h.indexOf($(el).prop("nodeName").toLowerCase()) >= 0) {
console.log("Found", $(el).prop("nodeName"));
results += $(el).prop("outerHTML");
} else {
console.log($(el).text().trim());
results += $(el).text().trim();
}
});
}
return results;
}
$(".className").html(clean($(".className"), ["h1", "br"]));
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="className">
<h1>Something here</h1>
</br>
<p>Next line text</p>
</div>
这里有一个陷阱,如果有原始文本,它也可能会被剥离。