获取元素的子文本的方法,无论在<p>标记中
我正在Node.js
构build一个刮板,并遇到了一个小问题。 我试图构build一个获取元素文本的函数,而不pipe它是embedded在<p>
标记中,还是embedded在<span>
或者只是包含文本的<div>
。
以下目前仅适用于<p>
标签中包含的文本:
function getDescription(product){ var text =[]; $('.description *') .each(function(i, elem) { var dirty = $(this).text(); var clean = sanitize(dirty).trim(); if (clean.length){ text.push(clean); } }); text.join(','); sanitize(text).trim(); return text; }
这适用于这样的代码:
<div class="description"> <p>Test test test</p> </div>
但是这不起作用:
<div class="description"> Test test test </div>
作为参考, sanitize
和trim
function是Node Validator
一部分,但这与我的问题没有特别的关系 – 它们只是取一个string并从中删除空格。
任何想法,我可以做什么,使一个function工作的两个实例? 为了给伤害增加侮辱,我稍微有点受限,因为node
使用cheerio
库来复制jQuery
一些function,但不是全部。
使用.contents()而不是*
function getDescription(product){ var text =[]; $('.description').contents() .each(function(i, elem) { var dirty = $(this).text(); var clean = sanitize(dirty).trim(); if (clean.length){ text.push(clean); } }); text.join(','); sanitize(text).trim(); return text; }
使用$(".description").contents()
( docs )。
*
仅select元素节点,但不select文本节点。
你可以使用innerText
:
var text =[]; $('.description').each(function(i, elem) { var dirty = elem.innerText; var clean = sanitize(dirty).trim(); if (clean.length){ text.push(clean); } });