0

現在正常に動作している if ステートメントがあります。

if ($('div').hasClass('is-sticky')) {
  $('body').addClass('has-sticky');
}

ただし、クラス「.is-sticky」は、別の jQuery プラグインからマークアップに動的に追加されます。そのため、そのクラスが追加または削除されるのを常に監視するには、on() を使用する必要があることがわかりました。しかし、現在の if ステートメントで on() を使用する方法がわかりません。

「.is-sticky」が動的に追加および削除されるのを監視し、「.has-sticky」のクラスが存在する場合は本体に追加したいと思います。

ありがとう!

4

4 に答える 4

0

.on()一致する要素が動的に変化する可能性のあるセレクターにイベントハンドラーをバインドするためのものです。ただし、イベント ハンドラーをバインドしていない (クラスが変更されたときにトリガーされるイベントがない) ため、この場合は役に立ちません。

setInterval()定期的にチェックしてクラスを更新するために使用できます。

setInterval(function() {
    $('body').toggleClass('has-sticky', $('div').hasClass('is-sticky'));
}, 1000);
于 2013-10-01T01:55:11.460 に答える
0

.on()クラスが DOM オブジェクトに追加または削除されるタイミングを監視するために使用することはできません。jQuery はその機能を提供しません。

クラスがいつ変更されたかを確認するためにできることは次のとおりです。

  1. クラスを変更する可能性のある操作 (それがすべて自分のコードである場合はこれらを知っておく必要があります) の後、クラスをテストする関数を呼び出し、クラスが変更されている場合はその作業を実行できます。

  2. そのクラスを変更するコード内のすべての場所を変更して、独自のカスタム変更イベントを発生させるか、独自の関数を呼び出すことができます。その後、そのイベントを処理するか、その関数で作業を行うことができます。

  3. 間隔タイマーを使用して DOM をポーリングし、変更を探すことができます (推奨されません)。

  4. DOM ミューテーション オブザーバーのいずれかが必要なことを実行でき、問題を解決するのに十分な数のブラウザーでサポートされているかどうかを調べることができます。

于 2013-10-01T02:01:28.820 に答える
0

この .is-sticky クラスを要素に追加するたびに、カスタム トリガーを作成してみませんか?

トリガー ハンドラーは次のようになります。

$('body').on('classAdded', function() {
   $(this).addClass('has-sticky');
});

トリガーブロックは次のようになります。

function whatever() {
   // logic that adds the class to $('div') .......
   // at this point, your $('div') has the is-sticky class already right?
   $('body').trigger('classAdded');
}

トリガー ブロックは、ハンドラーを呼び出す click/mouseenter などの他のイベントと同様です。これは関数呼び出しでもかまいませんが.....

于 2013-10-01T02:02:42.297 に答える