Javascript 使用cheerio进行DOM遍历-如何获取所有元素及其对应的文本
因此,我使用的是Cheerio,这是一个类似于节点服务器端的jQuery的库,它允许您解析html文本并遍历它,就像使用jQuery一样。我需要得到html正文的纯文本,但不仅如此,我还需要得到相应的元素和数字。IE:如果在第三段元素中找到纯文本,我会有如下内容:Javascript 使用cheerio进行DOM遍历-如何获取所有元素及其对应的文本,javascript,node.js,cheerio,dom-traversal,Javascript,Node.js,Cheerio,Dom Traversal,因此,我使用的是Cheerio,这是一个类似于节点服务器端的jQuery的库,它允许您解析html文本并遍历它,就像使用jQuery一样。我需要得到html正文的纯文本,但不仅如此,我还需要得到相应的元素和数字。IE:如果在第三段元素中找到纯文本,我会有如下内容: { text: <element plaintext>, element: "p-3" } 我是否朝着正确的方向前进,我是否应该尝试其他方法?在此方面的任何帮助都将不胜感激。同样,这不是jQuery,而是
{
text: <element plaintext>,
element: "p-3"
}
我是否朝着正确的方向前进,我是否应该尝试其他方法?在此方面的任何帮助都将不胜感激。同样,这不是jQuery,而是服务器端的Cheerio。(然而,它们非常相似)我认为如果使用
*
css选择器,则不需要进行大量遍历
function textElements($){
const found = {}
return $('body *').map(function(el){
if ( $(this).children().length || $(this).text() === '' ) return
found[this.name] = found[this.name] ? 1 + found[this.name] : 1
return {
text: $(this).text(),
element: `${this.name}-${found[this.name]}`,
}
}).get()
}
textElements(cheerio.load(html)
从您当前的代码来看,您似乎乐于忽略具有子元素和文本的元素?就像
文本中的dt
是的,这是我遇到的问题之一。我不知道如何处理这种情况而不获得大量的重复项,比如说
会为td和a拾取“废话废话”。这似乎是可行的,但当html类似于hello,单击此处查看我们的结果时,它仍然会遇到问题,它只从那里拾取“单击此处”。
function textElements($){
const found = {}
return $('body *').map(function(el){
if ( $(this).children().length || $(this).text() === '' ) return
found[this.name] = found[this.name] ? 1 + found[this.name] : 1
return {
text: $(this).text(),
element: `${this.name}-${found[this.name]}`,
}
}).get()
}
textElements(cheerio.load(html)