You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 14:15:41