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

标签 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;
}

这适用于这样的代码:

<div class="description">
    <p>Test test test</p>
</div>

但不适用于此:

<div class="description">
    Test test test
</div>

作为引用,sanitizetrim函数是 Node Validator 的一部分,但这与我的问题不是特别相关 - 他们只是获取一个字符串并从中删除空格。

关于我可以做些什么来使一个函数对两个实例都起作用有什么想法吗?雪上加霜的是,我的限制稍微有限一点 node使用 cheerio 复制 jQuery 的一些功能的库,但不是全部。

最佳答案

使用.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;
}

关于javascript - 获取元素的子文本的方法,无论是否在 <p> 标记中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17191428/

相关文章:

javascript - IE 11 - 开发者工具和检测旧的 IE 浏览器

javascript - 如何找到div下方页面部分的高度?

javascript - "migration:create"和 "migration:generate"之间有什么区别?

node.js - Node : Unable to get response body when working with vows and nodejs http module

使用 Prisma 执行 MySQL 查询花费的时间太长

javascript - 未捕获的 TypeError : $(. ..).tableDnD 不是函数

javascript - 访问 D3 多线图表上工具提示中的数据

javascript - 如何创建一个可以影响任何值类型的方法?

javascript - 如何找到具有变量类的 div?

JQuery动画不透明度时闪烁,并且不透明度达到1