Cheerio如何获取选择器返回多元素的完整递归HTML?
解决Cheerio获取所有匹配元素HTML的问题
你遇到的是Cheerio中.html()方法的默认行为限制——它只返回第一个匹配元素的内部HTML(直接调用集合的.html()时),而如果要获取所有匹配元素的完整HTML(包含元素自身标签),可以这样处理:
方法1:获取所有匹配元素的外层HTML(含自身标签)
用map()遍历每个匹配元素,通过顶层的$.html()方法逐个转换为HTML字符串,最后拼接起来:
const $ = cheerio.load(你的HTML内容); const combinedHtml = $('.apple').map((index, element) => { return $.html(element); }).get().join('');
这段代码会输出所有带.apple类的<li>元素的完整HTML,比如:
<li class="apple">Apple</li><li class="apple">Apple TOoo</li>
方法2:获取所有匹配元素的内部HTML(仅元素内容)
如果只需要每个元素里的内容(不含自身标签),可以用集合的.html()结合遍历:
const combinedInnerHtml = $('.apple').map((index, element) => { return $(element).html(); }).get().join('');
输出结果就是AppleApple TOoo。
关于你遇到的Object[Object]问题
你之前用顶层.html(node)时出现这个问题,大概率是传入了整个Cheerio集合(比如$.html($('.apple'))),而不是单个DOM元素。$.html()需要传入单个元素,所以遍历的时候要取每个element传入才会正确解析子节点。
Cheerio确实没有像.text()那样直接返回所有匹配元素HTML拼接的内置方法,但上面的map()+get()+join()写法就是和.text()逻辑一致的实现——遍历每个匹配元素,处理后合并结果。
内容的提问来源于stack exchange,提问作者David d C e Freitas
相关产品推荐
相关产品推荐

