1- Загрузка тела с помощью cheerio
var $ = cheerio.load(body);
2- С помощью этой рекурсивной функции вы можете заменить свою цель во всех элементах и их дочерних элементах
function replacer($, text) {
if ($(text).children().length) {
$(text).children().each(function (itm) {
return replacer($, $(this));
});
}
else {
var value = $(text).text();
value = value.replace(/ipsum/g, '<a href="https://www.google.com/search?q=ipsum">ipsum</a>');
return $(text).text(value);
}
}
3- Поверните узлы cheerio dom обратно в html с помощью этого
return $.html(bb);
4- Замените все "
, <
и>
с правильными символами.
f(b).replace(/</g,'<').replace(/>/g, '>').replace(/"/g, '"')
Надеюсь, это поможет вам.Просто измените, где вы хотите, код
var b = `<p>
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fusce porttitor, magna nec sollicitudin varius, ligula nisi finibus nulla, vel posuere libero erat eu tortor.
</p>
<p>
<ul>
<li>Lorem</li>
<li>ipsum</li>
<li>dolor</li>
<li>sit</li>
<li>amet</li>
</ul>
</p>
<p>
Lorem <b>ipsum</b> <span><em>dolor</em></span> sit amet, consectetur adipiscing elit.
</p>`;
var cheerio = require('cheerio');
function replacer($, text) {
if ($(text).children().length) {
$(text).children().each(function(itm) {
return replacer($, $(this));
});
} else {
var value = $(text).text();
value = value.replace(/ipsum/g, '<a href="https://www.google.com/search?q=ipsum">ipsum</a>');
return $(text).text(value);
}
}
function f(body) {
var $ = cheerio.load(body);
var bb = $("p").each(function(itm) {
return replacer($, $(this));
});
return $.html(bb);
}
console.log(f(b).replace(/</g, '<').replace(/>/g, '>').replace(/"/g, '"'))
Вывод:
<p>
Lorem <a href="https://www.google.com/search?q=ipsum">ipsum</a> dolor sit amet, consectetur adipiscing elit. Fusce porttitor, magna nec sollicitudin varius, ligula nisi finibus nulla, vel posuere libero erat eu tortor.
</p>
<p>
<ul>
<li>Lorem</li>
<li><a href="https://www.google.com/search?q=ipsum">ipsum</a></li>
<li>dolor</li>
<li>sit</li>
<li>amet</li>
</ul>
</p>
<p>
Lorem <b><a href="https://www.google.com/search?q=ipsum">ipsum</a></b> <span><em>dolor</em></span> sit amet, consectetur adipiscing elit.