1

次のコードを考えると、セレクタープロパティが最初のインスタンスでは機能するのに、2番目のインスタンスでは機能しないのはなぜですか?どちらもjQueryオブジェクトではありませんか?

<span class='tst'>span</span>​

var tst = $('.tst');
console.log(tst.selector); 
// prints '.tst'

$('.tst').each(function() { console.log(this.selector);});
// prints undefined​​​​​​​
4

3 に答える 3

5

this.each()ループのコンテキストでは、jQueryオブジェクトではないため、selectorプロパティは未定義です。

最初にそれをjQueryオブジェクトにする必要があります。$(this).selector

ただし、ループselector内では、プロパティが空の文字列を返すことに注意してください。.each()

編集

selector内のプロパティがどうしても必要な場合.each()、1つのオプションはセレクターをキャッシュすることです。

var cached = $('.tst');

cached.each(function() { 
    console.log(cached.selector); // Will display ".tst"
});

</ p>

于 2012-07-10T02:42:50.997 に答える
2

this != $(this)

最初のケースtstはjQueryオブジェクトへの参照ですが、2番目のケースthisは単に対応するDOM要素です。

ただし、ループ内で.each()は.selectorプロパティは使用できません。'.tst'にアクセスする$(this).attr("class")には、(クラスセレクターを使用する場合)実行できます。ただし、それぞれで既に使用している場合は、事前に変数にキャッシュすることができます。

これにより、その要素のすべてのクラスが返されるため、複数のクラスがある場合は後で解析できることに注意してください。

正確な説明に基づく最善の回避策は次のとおりです。

var $tst = $(".tst");
$tst.each(function() {
    console.log($tst.selector); //prints .tst
});

しかし、あなたが本当にこれをする必要がある理由はわかりません。

于 2012-07-10T02:43:06.070 に答える
1

ワーキングデモ http://jsfiddle.net/wA6Yv/ または http://jsfiddle.net/a3CYR/2/

これ != $(これ)

jQuery : 「$(this)」と「this」の違いは何ですか?

コード

var tst = $('.tst');
console.log(tst.selector);
// prints '.tst'
$('.tst').each(function() {
    alert($(this).text());
});
// prints undefined
于 2012-07-10T02:46:18.187 に答える