2012-03-07 2 views
1

私はjQueryをそれほど使用していないため、簡単な質問です。jQueryのトラバーサル - 現在の入力に前のラベルを見つける

このシナリオでは、ラベルのhtmlにアクセスするためのより素早く簡単な方法がありますか?ここで

は、これは私がラベル用のHTMLをつかむために、現在使用しているjQueryのスニペットです

<tr> 
    <td> 
     <label>Please fill in name:</label> 
    </td> 
    <td> 
     <input type="text" id="txtName" class="validate" /> 
    </td> 
</tr> 
<tr> 
    <td> 
     <label>Date of Birth:</label> 
    </td> 
    <td> 
     <input type="text" id="txtDOB" class="validate" /> 
    </td> 
</tr> 

、一例として、ダウン易しく書き直さバージョンです。

$(document).ready(function(){ 
    $('.validate').each(function(){ 
     if(!$(this).val()) 
     { 
      var label = $(this).parent().prev().find('label').html(); 
      alert(label); 
     } 
    }); 
}); 

すべてのアイデアは

+0

9秒で私にビート –

答えて

3

はい、次のコードを考えてみましょう代わりにParent()

Closest()を使用することによってそうする別のきちんとした方法があり高く評価されています

$(document).ready(function(){ 
    $('.validate').each(function(){ 
     if(!$(this).val()) 
     { 
      var label = $(this).closest("tr").find('label').html(); 
      alert(label); 
     } 
    }); 
}); 

Closest()をセレクタに一致する最初の要素を取得します。現在の要素から順に処理されます。 DOMツリーを通して。

+0

私には罰金見える:P笑!それも私が投稿するつもりです。 – Benno

+2

@Benno:LOL、私は何度も何度もこの問題に苦しんできました。Stackoverflowのユーザーは気をつけています。 –

+0

@MohammedElSayed:ありがとう、ちょっとネタです。これは私が本当に探していたものです。私はあなたが一番速かったので、私はこの答えを受け入れるでしょう。 –

0

はい、あなたは少しそれを短縮することができます。

$(document).ready(function(){ 
    $('.validate').each(function(){ 
     if(!$(this).val()) 
     { 
      var label = $(this).parents('tr').find('label').html(); 
      alert(label); 
     } 
    }); 
}); 
1

私はそれはあなたの質問から流用の一種だにもかかわらず、答えとしてこれを追加します:

あなたが使用しています非表形式のデータのためのテーブルベースのレイアウト、あなたはjQueryのになる場合には、そのような

<div> 
<label>Please fill in name:</label> 
<input type="text" id="txtName" class="validate" /> 
</div> 
<div> 
<label>Date of Birth:</label> 
<input type="text" id="txtDOB" class="validate" /> 
</div> 

ようなレイアウトを持つべきです超シンプル:

$('.validate').each(function(){ 
     if(!$(this).val()) 
     { 
      var label = $(this).prev('label').html(); 
      alert(label); 
     } 
    }); 

ライブ例:あなたがいないだけで、ラベルの属性「の」を使用する必要がありますhttp://jsfiddle.net/MDFEm/

+0

この例をありがとうございます。 –

0

が、それはそれはあなたに短いセレクターを与えるアクセス/セマンティックです:

<table> 
    <tr> 
     <td> 
     <label for="txtName">Please fill in name:</label> 
     </td> 
     <td> 
     <input type="text" id="txtName" class="validate" /> 
     </td> 
    </tr> 
    <tr> 
     <td> 
     <label for="txtDOB">Date of Birth:</label> 
     </td> 
     <td> 
     <input type="text" id="txtDOB" class="validate" /> 
     </td> 
    </tr> 
</table> 

$(document).ready(function(){ 
    $('.validate').each(function(){ 
    if(!$(this).val()) 
    { 
     var label = $('label[for="'+$(this).attr('id')+'"]').html(); 
     alert(label); 
    } 
    }); 
});​ 
+0

この代替バージョンのおかげで、私は一般にラベルの 'for'属性を使用します。私は、私が達成しようとしていることを示すために、「いいえ」という例を提供しました。 –

関連する問題