让我说我有像这样的脏HTML ...
let dirty = `
<pre>
pre tag with <b>html</b>
</pre>
<pre>
another pre tag with <b>html</b>
</pre>
`
我需要从每个预标记的子项中删除html ...
我这样做......
let $ = cheerio.load(dirty)
$('pre').each(function() {
let text = $(this).text()
console.warn(text) // html are stripped
return `<pre>${text}</pre>`
});
console.log($.html()) // html are not stripped
我错过了什么.. ??
答案 0 :(得分:2)
首先请注意,虽然您在技术上可以使用反引号来划分多行字符串,但它在IE中完全不受支持,因此无法可靠地使用。您需要使用引号('
)或双引号("
)代替。
您的逻辑问题是您在每个循环中定义text
变量,但不对其执行任何操作,因为从each()
返回是多余的。
要解决此问题,您只需使用text()
方法从指定元素中去除任何子HTML。试试这个:
let dirty = '<pre>pre tag with <b>html</b></pre><pre>another pre tag with <b>html</b></pre>';
$('body').append(dirty);
$('pre').text(function(i, t) {
return t;
});
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
&#13;
答案 1 :(得分:1)
$('pre').each(function() {
let text = $(this).text()
// You need to inject cleaned string into the DOM
$(this).html(text)
});
console.log($('div').html())
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div>
<pre>
pre tag with <b>html</b>
</pre>
<pre>
another pre tag with <b>html</b>
</pre>
</div>
答案 2 :(得分:1)
您需要实际分配新的html,现在您不必将html设置为其他内容。以下将有效
const cheerio = require("cheerio");
let dirty = `
<pre>
pre tag with <b>html</b>
</pre>
<pre>
another pre tag with <b>html</b>
</pre>
`;
let $ = cheerio.load(dirty);
$("pre").each(function() {
$(this).html($(this).text());
});
console.log($.html());