0

有人可以告诉我如何在 nodejs 中将字符串截断为多个字符/单词,理想情况下注意字符串中的 HTML 标记吗?

这应该类似于 Django 的 truncatechars/truncatewords 和 truncatechars_html/truncatewords_html 过滤器。

如果玉中不存在这种情况,那该走哪条路才是对的呢?我正在启动我的第一个 nodejs+express+CouchDB 应用程序,并且可以在 nodejs 代码中执行此操作,但似乎过滤器更合适。如果我知道如何编写这样的过滤器(和其他过滤器),我也会考虑:))

只是一个简单的例子:

// in nodejs:
// body variable comes from CouchDB
res.render('home.jade', { title : "test", featuredNews : eval(body)});

// in home.jade template:
    ul.thumbnails
    each article in featuredNews.rows
        a(href="#"+article.slug)
            li.span4
                div.value.thumbnail
                    img(align='left',src='http://example.com/image.png')
                    p!= article.value.description:truncatewords_html(30)

所以我编造了 truncatewords_html(30) 的东西来说明我认为它应该类似于什么。

将不胜感激任何想法!

谢谢,伊戈尔

4

2 回答 2

2

这是一个小“truncate_words”函数:

function truncate( value, arg ) {
    var value_arr = value.split( ' ' );
    if( arg < value_arr.length ) {
        value = value_arr.slice( 0, arg ).join( ' ' );
    }
    return value;
}

您可以在将字符串发送到模板之前使用它,或者在模板中使用辅助方法。

于 2012-06-29T08:15:20.950 回答
0

cheerio is a nice little library that does a subset of jquery and jsdom. Then it's easy:

app.helpers({
    truncateWords_html : function(html, words){
       return cheerio(html).text().split(/\s/).slice(0, words).join(" ")
    }
})

Then, in a jade template use:

#{truncateWords_html(article.value.description, 30)}

This looks like a generic way to add any filters, hurray! :))

于 2012-07-03T13:01:42.103 回答