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

Cheerio多子节点文本提取:如何避免文本合并并添加分隔空格

解决Cheerio多子节点文本合并无空格的问题

直接用.contents()遍历所有子节点,过滤并处理文本节点,再用空格拼接结果,就能避免不同子节点文本直接连写的问题。

正确的代码实现:

$(selector)
  .first()
  .contents()
  .map((_, node) => {
    // 处理文本节点(nodeType为3)
    if (node.nodeType === 3) {
      return $(node).text().replace(/\s+/g, " ").trim();
    }
    // 递归处理元素节点的子文本节点(nodeType为1)
    if (node.nodeType === 1) {
      return $(node).contents().map((_, child) => {
        if (child.nodeType === 3) {
          return $(child).text().replace(/\s+/g, " ").trim();
        }
        return "";
      }).get().join(" ").trim();
    }
    return "";
  })
  .get()
  .filter(text => text) // 过滤空字符串
  .join(" ")
  .trim();

代码说明

  • .contents()能获取当前元素的所有子节点(包括文本节点和元素节点)
  • 通过nodeType区分节点类型:3代表文本节点,1代表元素节点
  • 文本节点直接做空格去重和修剪处理
  • 元素节点递归遍历内部文本,避免嵌套标签导致的文本丢失
  • 最后用空格拼接所有有效文本,确保不同节点的文本被分隔开

比如处理<div>Hello<span>World</span><p>!</p></div>这类结构,会得到Hello World !的结果,不会出现文本连写的情况。

内容的提问来源于stack exchange,提问作者seventeen

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 05:12:02