3

を使用して、ページを通過し、一致する各要素に CSS クラスを追加する単純な関数があります.each()。また、AJAX を使用してページを常に更新していますが、最初の AJAX 更新後に変更が加えられた後、機能が適用されなくなりました。

コード:

$("div.col-conversation span.label-sticky").each(function () {
    $(this).closest('li').addClass('stickyhighlight');
});

最初のAJAXイベントの後に機能しない理由を理解して使用しようとしましたが、イベントでは.live()ない.delegate()ものをバインドできるようには見えません(つまり、クリック、ホバーなどにのみバインドできます)この方法なので、.each()うまくいきません。

この関数を AJAX 成功コールバックに含めずに、livequery のようなプラグインを使用せずに実行する簡単な方法はありますか?

4

2 に答える 2

1

私はこれがあなたのために働くと思います:

$('body').on('mychange','div.col-conversation span.label-sticky',function () {
   $(this).closest('li').addClass('stickyhighlight');
});

これをajax成功関数に追加します。

$('body').trigger('mychange');

または、ajax成功関数を本当に変更したくない(または変更できない)場合:

setInterval(function() {
   $('div.col-conversation span.label-sticky').each(function () {
       $(this).closest('li').addClass('stickyhighlight');
   });
},100);
于 2013-02-27T02:14:35.490 に答える
1

一致する項目ごとにイベント ハンドラーをアタッチするよりもおそらく優れているのは、jQuery.on() でセレクター パラメーターを使用してイベントをアタッチすることです。次のようなことができます。

$('#container').on('click', '.yourClass', function(event){ doStuff(); });

<div id="container">
    <span class="yourClass">...</span>
    <div class="yourClass">...</div>
    <anything class="yourClass">...</anything>
</div>

これは、クラスの項目ごとに 1 つのイベントではなく、1 つのイベント リスナーのみをアクティブにする必要があることを意味します。また、コンテナーに項目を追加する場合、リスナーを更新する必要がないことも意味します。パフォーマンスが向上し、扱いやすくなります。

.on() の詳細については、jQuery.comを確認してください。

于 2013-02-27T02:06:56.040 に答える