2011-10-25 11 views
0

jQueryが新しく、2つの異なるDOMシナリオでタグを選択するエレガントな方法があるのだろうかと思っています。私は、入力値が空の場合、フォームを検証し、段落タグ(テキストを太字にし、赤で強調表示)にエラークラスを追加するためにjQueryを使用しています。段落と入力タグの中には、このようなDOMに存在します。複数のシナリオで前の段落タグを選択

<td><p>Name:</p></td><td><input type="text" name="field_name"></td> 

他の人がこのように存在している間:

<td><p>Name:</p><input type="text" name="field_name"></td> 

私のjQueryの機能は、これまでに次のようになります。

$("#form_id").submit(function() { 
    var answer = true; 
    $(this).find(".required").map(function() { 
     if(!$(this).val()) { 
      $(this).closest("td").prev("td").find("p").addClass("form_error"); 
      answer = false; 
     } 
     else { 
      $(this).closest("td").prev("td").find("p").removeClass("form_error"); 
     } 
    }); 
    return answer; 
}); 

重要なのは次のとおりです。

$(this).closest("td").prev("td").find("p").addClass("form_error"); 

私の最初のDOMシナリオの下ではpタグの明示的な選択ですが、もちろん2番目のDOMで失敗します。私は両方のシナリオでpタグを選択するコードの1行を探しています。私は.prev("p")と一緒に遊んでいますが、今のところそれを理解していません。これを行う方法はありますか?

+0

少し完成したHTMLを投稿すると便利です。 – Jasper

+0

追加情報:の行が私の質問に記載されているテーブルは別のテーブルの中に入れ子になっています – joshuahedlund

答えて

2

テキスト入力とそのタイトル(<p>タグ内のテキスト)は、あなたがこれらのいずれかのようセレクタを使用することができ行内の2つだけある場合:ここでは

$('.required').parents('tr:first').find('p').addClass('form_error'); 

$('.required').closest('tr').find('p').addClass('form_error'); 

は、上記のjsfiddleですソリューション:http://jsfiddle.net/Lyaqp/2/

+0

これはうまくいきました。 – joshuahedlund

関連する問題