2011-01-05 15 views
1

私は常に参照していた場合:どのように変数をjQueryにキャッシュしますか?

$('#' + n + ':nth-child(2)').val() 

は、その後どのように私は変数に$( '#' + n)をキャッシュしていますか?

$n = $('#' + n); 
$n:nth-child(2) 
+0

「n」の値は何ですか?それは単にIDですか?末尾にスペース文字が含まれていますか?これらの詳細は違いを生みます。 – user113716

答えて

1

別の方法:あなたはjQueryオブジェクトのルートの代わりに、.find()かの要素にセレクタを適用.filter()を、使用する必要が

$n = $('#' + n); 
$n.find(":nth-child(2)"); 
+0

'n'が' 'myID''のようなIDだけの場合、元のセレクタは' "#myID:nth-​​child(2)"のように見えますが、子孫セレクタ*は含まれません。その場合、 '.find()'を使うことは元のものとは異なります。 'n'の値を知らなくても確かに分かりません。 – user113716

+0

私はこのソリューションがより好きだと思うのですが、それはもう少し自己文書化しているからです。セレクタが何をしているのかがはっきりしている。 –

6

これを試してみてください:

var $n = $('#' + n); 
var $child = $(":nth-child(2)", $n); 
+0

OPへの注意:jQueryオブジェクトを表す変数の前に$が表示されます。これは素晴らしいコンベンションです。 – ScottE

+1

個人的には、jQueryオブジェクトの変数の前に$が嫌いです。たぶんPHPをあまりにも思い出させるかもしれません。 –

+0

[jQueryがセレクタコンテキストを実装する方法](http://api.jquery.com/jquery/#selector-context)のため、 '$($ n).find( ':nth-​​child 2) ');「私は違いは違いますが、せいぜい軽度である可能性が高いと思います。 –

1

をコンテキストパラメータ。ルートの要素内を検索します。

あなたの質問の最初のセレクタのようなものと評価されることを想定している

:それがある場合にのみsomeIDと一つの要素があるはずですから、それは私に少し気になり

$('#someID:nth-child(2)') 

より具体的な回答を得るには、nの値を知る必要があります。

+0

.filter()を使用すると、元のセレクタと同じ結果が返されるとは限りません。子供が含まれていないためです。 'second'の後続のアクションは元の$ nのアクションと同じには動作しないかもしれません。 –

+0

@jamietre:構造が変わらない限り、それは同じです。 '#+ n '要素は':nth-​​child(2) 'であるか、そうではありません。要素上に 'nth-child'を指定するのはちょっと奇妙です。 – user113716

+1

あなたのコメントが現れたとき、私はその理解にゆっくりと来ました:)本当に、私はこの質問について、より一般的には、n番目の子供の文脈では考えていませんでした。 –

関連する問題