You need to enable JavaScript to run this app. Cheerio 如何通过$('.date')选择器获取同级标签后的文本节点
优惠活动
大模型
产品
解决方案
定价
更多

Cheerio 如何通过$('.date')选择器获取同级标签后的文本节点

失效原因

所有常规next()方法的返回值为空,本质是这类方法默认仅匹配元素类型的相邻兄弟节点,目标日期是和.category同级的纯文本节点,不属于元素类型,因此无法被元素级遍历方法捕获。

可直接运行的实现代码
  • 核心API提示:需要用contents()方法获取容器下所有类型的节点(包含文本、元素、注释节点),不能用仅返回元素节点的children()方法
const cheerio = require('cheerio')
const html = `
<html>
    <body>
        <span class="date">
            <span class="category">Article</span>
            Sat, 22 Jan 2021 11:12
        </span>
    </body>
</html>`

const $ = cheerio.load(html)

// 方案1:从主选择器$('.date')出发过滤目标文本
const dateText = $('.date')
  .contents()
  .filter((index, node) => {
    // 排除带category类的元素节点
    return !(node.attribs && node.attribs.class === 'category')
  })
  .text()
  .trim()

console.log(dateText) // 输出:Sat, 22 Jan 2021 11:12

// 方案2:从.category节点出发取相邻同级文本
const dateText2 = $('.category')
  .nextSibling
  .nodeValue
  .trim()

console.log(dateText2) // 输出:Sat, 22 Jan 2021 11:12
常见踩坑说明
  • 直接调用$('.date').text()会把.category标签内的"Article"文本一并读取,无法分离出独立的日期内容
  • 调用children()方法拿到的子节点列表仅包含元素类型节点,对这类节点调用next()方法时,会自动跳过纯文本节点,最终返回空值
  • 不要混用jQuery和Cheerio的节点遍历逻辑:获取同级纯文本时必须直接操作原生节点属性,不能依赖元素选择器的遍历规则

内容的提问来源于stack exchange,提问作者Haxtor.ID

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.07 09:15:03