2012-03-05 16 views
1

私は、フォーム内の複数のフィールドをループしてリンクテキストを変更する必要があります。。nearest with with()

私の望ましい結果は

Alert("Second 1"); 
Alert("Second 2"); 

例コードされる:

<div class="text-wrapper"> 
    <input class="field-text" value=""> 
</div> 
<div> 
    <ul> 
     <li><a href="" class="first">First</li> 
     <li><a href="" class="second">Second 1</li> 
    </ul> 
</div> 
<div class="text-wrapper"> 
    <input class="field-text" value=""> 
</div> 
<div> 
    <ul> 
     <li><a href="" class="first">First</li> 
     <li><a href="" class="second">Second 2</li> 
    </ul> 
</div> 

<script> 
jQuery(document).ready(function() { 
     jQuery(".text-wrapper").each(function(){ 
      var value = jQuery(this).closest("a.second").text(); 
      alert(value); 
     }); 
}); 
</script> 
+0

どれも「class'secondでアンカータグを持っていません。 – DG3

+0

CSSクラス "second"をターゲットにしているのはなぜですか? – j08691

+1

@user:使用する前に、[.closest() '](http://api.jquery.com/closest)のドキュメントをお読みになりましたか? –

答えて

4

closestはセレクタではなく子に一致する親を見つけます。

代わりにfindが必要です。

編集:findあなたの探しているタグはtext-wrapperの子ではありません。要素を見つけるには、DOMを手動でトラバースする必要があります。

jQuery(this).next('div').find("a.second").text(); 
+1

でも '.text-wrapper'は' a.second'の親ではありません –

+0

@IliaG:私の編集では '.next'となります:-) –

+1

ここにはこの解決策のjsfiddleがあります。あなたの編集は私にそれを打つ:) http://jsfiddle.net/QFgun/ 何らかの理由で2番目のリンクのテキストが空白として表示されています。 – Patricia

2

closest()ノード自体で始まるDOMツリーをUP歩く、それはなどのparentNode、のparentNodeのはparentNode、およびです。 探している関数は、特定のノードの子孫を検索するfind()です。完全性について

編集:

a.second.text-wrapperの子孫ではないので、あなたは最初.text-wrapperの次の兄弟、a.secondを含む、すなわちdiv要素を返す、next()を呼び出す必要があります。コンソールログに示す両方のリンクを含む作業溶液の

jQuery(this).next().find('a.second').text() 
+0

'a.second'は' .text-wrapper'の子ではありません。 –

0
+0

別のサイトではなく、ここにソリューションを掲載してください。そのリンクが絶たれた場合、将来の読者があなたの答えから恩恵を受けることができます。 –

0

これは、あなたが提供されるテストケースごとに動作するはずです。あなたは閉じていない持っているあなたは、コードの下にしようとする前に、近くに持って正しくタグ:

$("div:odd").each(function(){ 
    var value = $(this).find("a.second").html(); 
    alert(value); 
}); 

フィドルリンク:クラスのテキスト・ラッパー "とあなたのdivのhttp://jsfiddle.net/harshithjv/2ePn9/1/