0

たとえば、次のようなものがあります。

$first = $('#firstElement').click(function() { });

しかし、ページの実行のある時点で、その要素を別の要素に置き換えます。

$newElement = jQuery('<div />');
$first.replaceWith($newElement);

しかし、最初の要素のコールバックを2番目に保持したい...

それは可能ですか?

編集1

.on()またはでそれを行う方法はすでに知っています.delegate()。これは私のシナリオです:

セレクターが変更されたら何かをロードする必要がありますが、そのセレクターの内容は、ログインしているユーザーの役割によって異なります。にすでに情報が保存されていlocalstorageます。そのセレクターのコンテンツは、次の方法でロードされます。

window.Core.setBranchesSelector($('#theElementInWhichTheSelectorWillBe'));

その関数は<select>要素を作成します。jsそのページ内で作成できます:

$('#parent').on('click', '#theElementInWhichTheSelectorWillBe', function() {});

しかし、私はその機能を可能な限り柔軟にしたかったので、次のように考えてみると:

$elementToBeReplaced = $('<coolElement />').click(function() {});
/* Something really cool with that element */
Core.setBranchesSelector($elementToBeReplaced);

セレクターはイベントのコールバックを継承しますclick...

4

3 に答える 3

2

あなたの質問に対する単純な答え: いいえ、できません。少なくとも、新しいバージョンの jQuery ではできません (1.7 では、@undefined が回答 #15708467 へのコメントで既に述べているように)。

ただし、.on()で委譲を使用した簡単な例を次に示します。

http://jsfiddle.net/8dCQT/

$(function() {
    $("#parent").on("click", ".child", function() {
        alert($(this).text());
    });
    $("input").click(function() {
        $(".child").remove();
        $("#parent").append("<div class='child'>I'm a replacement</div>");
    });
});

ボタンをクリックした後、置換 div をクリックすると同じクリック関数が呼び出され、新しい div のテキストでアラートが表示されます。

注: ここで重要な点は、元のセレクターと同じセレクター(この場合は.child) で置換を選択できることです。ここではクラスを使用しましたが、親の最初の子、またはその他の機能を使用することもできました。

また、注: 直接の親にバインドする必要はありません。 で一番上までバインドできますがdocument、コードの速度が低下するため、お勧めしません。イベントをアタッチしたい要素のできるだけ近くにバインドして、コードが DOM ツリーをさかのぼる必要がないようにする必要があります。

于 2013-03-29T17:44:26.087 に答える
1

jQuery は、既にバインドされているイベントに直接アクセスするための API を提供していません。

イベントを親要素に配置し、子要素を置き換え、イベントのバブリングに依存してキャッチします。

于 2013-03-29T17:39:06.550 に答える
1

各要素に同じ ID を含めるか、各 div に共通のクラスを与える必要があります。それができたら、次のように簡単です。

$(document).on('click','.some-common-class',function(){
});
于 2013-03-29T17:39:37.067 に答える