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

使用Cheerio选择.boxMain下b标签的紧邻兄弟元素并提取文本的方法

使用Cheerio选择.boxMain下b标签的紧邻兄弟元素并提取文本的方法

嘿,我来帮你搞定这个Cheerio的文本提取问题~你已经能轻松选中<b>标签了,但要获取它们后面的纯文本内容(就是那些没被任何标签包裹的文本),需要注意Cheerio对文本节点的处理方式——普通的next()方法只会选中标签元素,而我们要找的是文本节点(nodeType为3的节点)。

这里给你两种实用的方法:

方法一:直接遍历兄弟节点,跳过空白文本

利用原生DOM的nextSibling属性,逐个检查兄弟节点,跳过那些只有空白的文本节点,直到找到有实际内容的文本:

$('.boxMain b').toArray().map(item => {
  let nextNode = item.nextSibling;
  // 跳过空白文本节点和非文本节点
  while (nextNode && (nextNode.nodeType !== 3 || !nextNode.textContent.trim())) {
    nextNode = nextNode.nextSibling;
  }
  // 返回清理后的文本,找不到就返回空字符串
  return nextNode ? nextNode.textContent.trim() : '';
});

这段代码会自动过滤掉HTML里的换行、空格这些无效空白,精准拿到你需要的this is the first area to select和this is the second area to select。

方法二:从父元素的所有子节点中定位

如果你的HTML结构比较复杂,也可以先拿到<b>标签的父元素,然后遍历父元素下的所有子节点(包括文本节点),找到<b>标签之后的第一个有效文本:

$('.boxMain b').toArray().map(item => {
  const parentChildren = $(item.parentNode).contents();
  let foundTargetB = false;
  let targetText = '';

  parentChildren.each((index, node) => {
    // 先找到当前的<b>标签,标记状态
    if (node === item) {
      foundTargetB = true;
      return;
    }
    // 找到<b>标签后,检查下一个文本节点是否有有效内容
    if (foundTargetB && node.nodeType === 3) {
      const trimmedText = node.textContent.trim();
      if (trimmedText) {
        targetText = trimmedText;
        return false; // 找到后立即退出循环,提升效率
      }
    }
  });

  return targetText;
});

这个方法兼容性更强,哪怕<b>标签和目标文本之间有其他空白节点或者注释节点,也能准确找到你要的内容。

备注:内容来源于stack exchange,提问作者user21189833

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.22 12:38:13