2012-05-14 19 views
-1

複数の.packagesクラスを持っている場合、現在の.packagesの実装方法javascriptの 'this'キーワード

$('.packages').each(function(){ 
    var sizeOfLi = $(".packages:last > li").width(); 
}); 
+3

FWIW JavaScriptの一般的なコンセプトである 'this'よりjQueryの方が多くなります。 –

+1

私はそれに答えてから質問が大きく変わった。正確に何をしようとしているのかを明確にすることはできますか?あなたの編集は基本的には意味をなさない。なぜなら、それはそのまま動作するから(つまり、あなたが望むものではないかもしれないが、有用なことがあるから)。 – Amadan

答えて

8
var sizeOfAllLi = $(".packages:last > li").map(function() { 
    return $(this).width(); 
}); 

jQueryのコレクションに対するmap関数の繰り返し処理を行い、現在の要素にthisセットと、引数に設けられた関数を呼び出します。 の戻り値をすべて配列 のjQueryコレクション(コメントを参照)に集めます。配列が必要な場合は、上記の末尾に.get()を追加します。関数の内部

thisは裸のDOM要素であるため、私たちは、jQueryの.width()を使用できるようにjQueryの要素として再ラップthisする必要があります。

+1

*"これは配列内のすべての戻り値を収集します "* jQueryオブジェクトにラップされています。実際の配列を取得するには '.get()'を使います。 –

+0

ありがとうたくさん:) –

+0

@ T.J.Crowder:jQueryのコレクションは配列にダックタイプなので、配列のように使うことができます、AFAIK。 '[0]'は '.get(0)'と同様に動作し、 'Array'プロトタイプで定義されたすべてのプリミティブも持ちます。そうじゃないの? – Amadan

0

これは、関数のメインセレクタであるjQueryのイベントハンドラに常に適用されます。

1
$(".packages:last > li").each(function() { 
    console.log($(this).width()) 
}); 
+0

私はあなたがdolarサインと括弧を必要としているとは思わないでしょう。 – Malyo

+3

@Malyo:jQueryの 'width'関数を使いたいと思っています。 'each'ループ内の' this'は生のDOM要素であり、jQueryインスタンスではありません。 –

+0

はい、次のようになります: 'this'は現在のdom要素です – fcalderan

1

each答えは大丈夫ですか、mapを使用することができます。

var liSizeArray = $(".packages:last > li").map(function() { 
    return $(this).width(); 
}).get(); 

戻り値は数値の配列、それぞれのli要素の幅になります。あなたが選択したときliの幅を取得したい場合

0

あなたは

を何をしたいかによって異なります。Amadanは

var sizeOfAllLi = $(".packages:last > li").map(function() { return $(this).width(); }) 

を言ったように

$(".packages:last > li").click(function(){ 
    sizeOfLi = $(this).width(); 
}); 

マップすべてのliサイズが行いますthisキーワードは、この場合の最新のLiを指します。

関連する問題