获取元素的子文本的方法,无论是否在<p>标记中

JVG*_*JVG 1 javascript jquery node.js

我正在建造一个刮刀,Node.js并且遇到了一个小问题.我正在尝试构建一个获取元素文本的函数,无论它是嵌入到<p>标记中,<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;
}
Run Code Online (Sandbox Code Playgroud)

这适用于这样的代码:

<div class="description">
    <p>Test test test</p>
</div>
Run Code Online (Sandbox Code Playgroud)

但不适用于此:

<div class="description">
    Test test test
</div>
Run Code Online (Sandbox Code Playgroud)

作为参考,sanitizetrim函数是其中的一部分Node Validator,但这与我的问题并不特别相关 - 它们只是取一个字符串并从中删除空格.

关于如何使一个功能适用于BOTH实例的任何想法?为了增加对伤害的侮辱,我稍微有点限制node使用cheerio库来复制某些功能jQuery,但不是全部.

Aru*_*hny 6

使用.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;
}
Run Code Online (Sandbox Code Playgroud)