0

nodejsのjadeで、文字列内の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は、jqueryとjsdomのサブセットを実行する小さなライブラリです。それなら簡単です:

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

次に、翡翠テンプレートで次を使用します。

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

これは、フィルターを追加する一般的な方法のように見えます。:))

于 2012-07-03T13:01:42.103 に答える