3

他のイベントは減価償却されているため (ライブ、デリゲート、クリック...)、「オン」機能を使用してイベントを添付したいと考えています。

しかし問題は: オブジェクトを生成する場合、パラメーターでセレクターを使用する必要があり、このパラメーターは文字列です!!

サンプル: (コンテキスト: 動的テーブル)

//Wrong way

$("#dataTable tbody tr").on("click", function(event){
    alert($(this).text());
});

//Good way

$("#dataTable tbody").on("click", "tr", function(event){
    alert($(this).text());
});

それを避けるために「find」メソッドを使用したい場合はどうすればよいですか

    // ?? (find div)
    $("#dataTable tbody").on("click", "tr > ul > li > ul > li > div", function(event){
            alert($(this).text());
        });

   // What I would like to do
    $("#dataTable tbody").on("click", $(this).find("div"), function(event){
            alert($(this).text());
        });

   //and I don't want to do this :
    $("#dataTable tbody").find('div').on("click", function(event){
            alert($(this).text());
        });

ありがとうございました !

4

2 に答える 2

3

以下と同等の作業:

// What I would like to do
$("#dataTable tbody").on("click", $(this).find("div"), function(event){
    alert($(this).text());
});

は...

// What I would like to do
$("#dataTable tbody").on("click", 'div', function(event){
    alert($(this).text());
});

divネストされたリスト内のをターゲットにする場合は、次の方法で回避できる場合があります。

// What I would like to do
$("#dataTable tbody").on("click", 'ul ul div', function(event){
    alert($(this).text());
});

...しかし、あなたの;に のものがあるかどうかによって異なります。セレクターで他の要素を考慮から除外するのに十分なだけ具体的である必要があります。のように具体的にする必要があることはめったにありません。その場合は、より近い要素(またはそれ自体) にクラスを適用し、代わりにその周りを選択するのが最善です。 ultbodytr > ul > li > ul > li > divdivdiv

また、減価償却されるのはそれだけであることに注意してくださいlive()。これを書いている時点では (1.7.2)delegate()はありませんが、1.8 にはあると思います。

減価償却の話はありません、click()またはそれは近道の対応物です。

于 2012-05-04T12:03:56.543 に答える
1

ネストされたリスト内にある DIV 要素を選択したい場合、これはそれを行う 1 つの方法です。

$( '#foo' ).on( 'click', 'ul ul div', function () { 

しかし、私はクラスをお勧めします。DIV 要素にクラスを設定するだけで、次のようになります。

$( '#foo' ).on( 'click', '.bar', function () { 
于 2012-05-04T13:38:08.110 に答える