2011-12-04 7 views
1

基本的に、divで区切られた2つのアンカータグがあります。以前のアンカータグを選択してjQueryでクラスを追加する

<a class="foo"></a> 

<div class="count">0</a> 

<a class="bar"></a> 

と、私はこのような何かをやっている:

 var addClass = $(this).parent().children('a:first-child').addClass('new'); 

それはそのようにのように最初のアンカータグに追加します:

<a class="foo new"></a> 

私はn番目を使用して知っている:子供をセレクタはかなり高価ですので、前のアンカーノードを選択する簡単な方法があるかどうかは疑問でした(2番目のノードを無視しています)。

答えて

2

を行うことができ、またこの

$(this).parent().children('a:eq(0)').addClass('new'); 

Learn more about :eq()

を行うことができます(firstがちょうどeq(0)   —を呼び出しますが、私はfirstより読み見つけるために、またはeq(0))私はおそらくfirstprevAllを組み合わせたい:要素の前の兄弟のすべて

$(this).prevAll("a").first().addClass("new"); 
// or 
$(this).prevAll("a").eq(0).addClass("new"); 

prevAllリターンを、順番に最も近い兄弟で始まりますもちろん、first/eq(0)は、セットを最初の要素に還元します。

あなたは、兄弟の不要なリストを構築避けるためにprevAll:firstセレクターを使用するように誘惑されるかもしれないが、to my surprise it works betterは事後firstを使用します。 jQueryのtraversal方法はあなたに多くの方法を与える

$(this).prev().addClass(0); 

$(this).siblings('a').eq(0).addClass(0); 

実際には、あなたの構成はあなたの例のように単純である場合、あなただけの簡単な操作を行うことができます。どの程度

+0

私はこれの単純さが好きです。ありがとう。:) –

+0

@bob_cobb:心配しないで、喜んで助けました。 –

3

あなたは<a><div>の間に要素がない場合、あなたは

$(this).prev('a'); 

Learn more about .prev()

+0

'prev( 'a')'は、彼が引用したマークアップで常に空のセットを返します。私はあなたが "間に要素がない"と言ったのを知っていますが、ポイントはそこにあります*。 –

+0

+1は私をeq()に紹介してくれましたが、T.J.の作品はきれいで、少しエレガントです(あなたのせいではなく、jQueryの性質です)。 –

+0

@bob_cobb:はい、それは非常に便利ですが、ここでは ':first'(セレクタ)と同じ問題がありますので、私の答えからリンクした質問を参照してください。私がセレクタ '' first '= ':eq(0)']ではなく、 ':first'よりむしろ' .first' [after the-fact]を使うほうが良いことに驚いていました。明確化のためにT.J.Crowderに感謝します。 –

0

任意の目的地に着く。

関連する問題