如何使用Cheerio获取HTML元素的#text文本内容?
解决方法
针对你要提取div中夹在<b>和<a>之间的文本节点内容,以下是两种可行方案:
jQuery 实现
直接通过contents()获取所有子节点(包括文本节点),再筛选出目标文本节点:
const targetText = $('div') .contents() .filter(function() { // 筛选文本节点(nodeType 为3表示文本节点) return this.nodeType === 3; }) .eq(1) // 对应第二个文本节点(第一个是<b>前的空白文本) .text() .trim(); // 去除前后多余空格
原生 JavaScript 实现
如果不用jQuery,原生JS同样可以精准定位:
const divElement = document.querySelector('div'); // 遍历所有子节点,筛选非空的文本节点 const validTextNodes = Array.from(divElement.childNodes).filter(node => { return node.nodeType === 3 && node.textContent.trim() !== ''; }); const targetText = validTextNodes[0].textContent.trim();
为什么之前的方法失效?
- 移除
<b>和<a>后用.text():如果操作后div的.text()返回undefined,大概率是选择器或DOM操作有误,且.text()会返回所有文本内容的拼接,无法单独提取中间段。 - 遍历
children:children只返回元素节点,不会包含文本节点,自然找不到目标内容;而contents()才会返回所有子节点(包括文本、注释等)。
内容的提问来源于stack exchange,提问作者RainWashed
相关产品推荐
相关产品推荐

