1

フィードを表示する「embedly」というサービスを使用しています。このフィードのテキストを短くしようとしているので、次のことを試しました。

$('.description').html(
     function(){
         return $.trim($(this).html())
                .substring(0, 100)
                .split(" ").slice(0, -1)
                .join(" ") + "...";}
);

これをドキュメントレディと「window.load」に配置しましたが、何も機能しないようです。次に例を示します:http://jsfiddle.net

4

3 に答える 3

2

Jquery の HTML は引数として関数を受け入れず、プレーンな HTML (文字列) のみを受け入れます。やりたいことをするには、.each():)を使用します。

訂正:以下のコメント投稿者が指摘したように、私のコードは正しいですが、実際には .html()フォームの引数として関数を受け入れ、$(...).html(function(index, oldhtml));html 部分に直接アクセスできるようにします。(指摘してくれた@Raminsonに感謝します)

@Raminsonの観察の前に、私のコードは次のとおりでした:

$('.description').each(
     function(i,e){
         $(e).html(reduce($(e).html()));}
);

function reduce(s)
{
         return s.substring(0, 100)
                .split(" ").slice(0, -1)
                .join(" ") + "...";
}

修正により、最初の部分は次のようになります (まだreduce()関数を使用しています)。

$(".description").html(function(i,s) { return reduce(s); });
于 2012-08-06T10:33:28.057 に答える
2

これを理解するのに非常に長い時間がかかりましたが、あなたができる最善のことは、要素をDOMにロードするのに1秒を与えてから、関数を実行することだと思います: http://jsfiddle.net/2VBSX/5/

$('div.newscontainer').embedly({
    key:':e0a98aba95ef11e09dcd4040d3dc5c07'
}).hide();

setTimeout(function() {
    $('div.newscontainer').show().find('.description').html(
        function(){
            return $.trim($(this).html())
            .substring(0, 100)
            .split(" ").slice(0, -1)
            .join(" ") + "...";
        }
    );
}, 1000);
于 2012-08-06T11:54:30.050 に答える
0

したがって、OPはすべての要素がその場で作成されたことに言及していないため、私の他の答えは有効ではありません。したがって、それらは古典的な方法で一致させることはできません。

変更が適切なイベント (クリックなど) に関連付けられている場合.on()、DOM に挿入された新しい要素に対しても有効であるため、 でデリゲートを使用するのは簡単です。しかし、残念ながらそうではありません。要素の作成を操作する必要があります。

1 つの解決策は、@ChrisClower のもの (新しい要素を定期的にページにポーリングするタイマー) です。

別の解決策は、LiveQuery プラグインを使用することです: http://docs.jquery.com/Plugins/livequery

そうすれば、すべてが簡単になります:

$(".description").livequery(function() {  $(e).html(reduce($(e).html())); });

 function reduce(s)
{
     return s.substring(0, 100)
            .split(" ").slice(0, -1)
            .join(" ") + "..."; 
}
于 2012-08-06T15:27:48.540 に答える