0

一連の html 要素 (この場合は H1s) をループして文字数をカウントし、文字数が 140 を超える場合は、文字を切り捨てて最初の 140 文字のみを出力し、その後に省略記号を出力したいと考えています。私はコンソールを介して自分のコードをテストしてきましたが、これまでのところこれを思いつきました。

$( "h1.evTitle" ).each(function( truncate ) {
     console.log($(this).text().substring(0, 140).split(" ").slice(0, -1).join(" ") + "...");
});

これは正常に機能しますが、長さに関係なく、すべての文字列に省略記号が追加されます。これを 140 文字を超える長さの文字列にのみ適用すると、if ステートメントがどのようになるかについて何か考えはありますか? これは一連の H1 であり、それらの 1 つだけではないことに注意してください。

誰かがこれをやりたい場合に備えて、これが私の最終的なコードです。

$('h1').each(function () {
    if ($(this).text().length>140) {
        $(this).text($(this).text().substring(0, 140).split(" ").slice(0, -1).join(" ") + "...");
    }
});

.split(" ")文字列を各単語を含む配列に分割するために追加し、配列.slice(0, -1)の最後の項目を削除していました (部分的な単語からジャンク文字を削除.join(" ")し、その配列を再び文字列に戻すために使用しました)。 .

4

3 に答える 3

2

最初に確認してください:

var str = $(this).text();
if (str.length > 140) {
    str = str.substring(0, 140) + "...";
}

$.trimjQueryを使用しているので、そこに1つか2つ投げることができます。

var str = $.trim($(this).text());
if (str.length > 140) {
    str = $.trim(str.substring(0, 140)) + "...";
}

1つ目は、元の空白の先頭と末尾の空白を削除し、2つ目は、省略記号の前にスペースがないようにします。

また、省略記号を切り捨てて追加するためのはるかに簡単な方法があることにも注意してください(上記を参照)。

分割/結合の目標が余分なスペースを削除することだった場合、そうは思わないが、これは次のようになります。

var str = $.trim($(this).text());
str = str.replace(/  +/g, " ");
if (str.length > 140) {
    str = $.trim(str.substring(0, 140)) + "...";
}

実例| ソース (この例では、結果を要素に書き戻します)

于 2013-03-14T15:48:42.650 に答える
1

$(this).text().length > 140エリプシスを追加する前に確認してください。

于 2013-03-14T15:48:36.507 に答える
1
$('h1').each(function () {
    if ($(this).text().length>140) {
        $(this).text($(this).text().substr(0, 140) + "...");
    }
});

jsFiddle の例

于 2013-03-14T15:50:45.477 に答える