1

たとえば、これは私に与えるでしょう:

 console.log($(".smartgridview-normal").selector)
 //result is  '.smartgridview-normal'.  

ここに画像の説明を入力してください

私のコードは:

    $( '.smartgridview-normal th' ).live( 'dblclick', function () {
        var optimalWidth = parseFloat( $( this ).attr( 'data-width' ) );
        console.log( $(this).selector );// At this point I need the selector
        $(this).addClass('selected');
    } );

私のログは私に空の文字列を与えています。'this'オブジェクトのセレクターはありません。'this'が指している要素のセレクターを取得する方法はありますか?

御時間ありがとうございます。

4

5 に答える 5

2

ああ、あなたの問題がどこにあるかわかります。$(this)セレクターを使用して構築されるのではなく、DOM要素を直接ラップすることによって構築されるため、どこにも運ばれません。$('.smartgridview-normal th').selector;を実行すると、明らかに元のセレクターを取得できます。しかし、との間には大きな違いが$('.smartgridview-normal th')あり$(this)ます。

于 2012-12-03T06:04:11.697 に答える
2

Amadanが言ったように、クリックハンドラー内thisでは、jQueryオブジェクトではなく要素を参照します

完璧ではありませんが、jQueryオブジェクトをキャッシュできます

var elements = $("#mySelector")
$elements.on("dblclick", function(event){
    console.log($elements.selector);
});​

テスト用のフィドル

于 2012-12-03T06:19:04.357 に答える
1

私のコメントを詳しく説明すると"#"+this.id、要素にIDがある場合に期待できる最善の方法です。そうでない場合、あなたが持っている唯一の情報は、要素が元の選択に属しているということです'.smartgridview-normal th'

コード内にいつでも自分でIDを追加できます(たとえば、現在の日付と時刻に基づく一意のID)。

于 2012-12-03T06:31:52.420 に答える
-2

nodeNameの代わりに使用してみてくださいselector

var selector = $(this)[0].nodeName;

または、

var selector = this.nodeName;
于 2012-12-03T06:15:41.627 に答える
-2

おそらく最初にそれを変数に設定しますか?

var sel = "answer";
$("#"+sel).on("dblclick", function(event){
   console.log("Current selector is "+sel);
});​
于 2012-12-03T06:36:33.530 に答える