1

テーブルがあり、そのうちのいくつかには検証を実行する必要がある入力フィールドがあります。検証後.mandatory、空白の入力フィールドにクラスをアタッチしています。td後で、子を持つ sをループして、テーブルのそれぞれの要素.mandatoryからそれぞれの text/html を取得する必要があります。のインデックスを見つけて、それを使用して正しい を取得するthのが最善の策だと思いましたが、 のインデックスを効率的に取得する方法がわかりません。私は何かを試しましたtdthtd

$('.mandatory').each(function(){
var ind = curr_tr.find('>td').index($(this).closest('td'));//curr_tr is a reference to the current tr I am working with
var txt = $('th:eq('+ind+')').html();
})

しかし、これは非効率的で、一部の.mandatoryフィールドがテーブル内の別のテーブルにネストされている場合は機能しません。td

4

4 に答える 4

2

インデックスと要素がコールバック関数に提供されます。

使用する:

$('.mandatory').each(function(i){

また:

$('.mandatory').each(function(i, e){

これにより、パラメーターのインデックスとi、オプションでパラメーターの要素が得られeます。必要に応じて、パラメータに別の名前を付けることができます。

于 2012-05-18T06:54:33.397 に答える
1

$.each()使用できるパラメーターは次のとおりですindexelement

$('.mandatory').each(function(index, el){
    var ind = curr_tr.find('>td').index($(this).closest('td')); //curr_tr is a reference to the current tr I am working with
    var txt = $('th:eq('+ind+')').html();
})

ただし、使用indexは問題を解決するための最良の方法とは思えません。DOM がどのように構成されているかを確認できるように、HTML を投稿していただけますか。などの組み合わせを使用しclosest()parent()トラバースすると、より良い解決策になる可能性が高くなります。

于 2012-05-18T06:54:35.937 に答える
1

を使用して現在の入力要素の親 td を取得し、メソッド.closest("td")を使用してその td のインデックス (兄弟の td 要素に相対的) を見つけることができます。.index()

$('.mandatory').each(function(){
   var ind = $(this).closest('td').index();
   var txt = $('th:eq('+ind+')').html();
});

それを行うために現在の tr への参照は必要ありません。この目的のために、にパラメーターを渡しません.index()

ただし、質問の最後の文に従ってネストされたテーブルを許可すると、.each()すべての入力を反復処理するのではなく、必須入力を含む tds を反復処理するために使用できます。

$('#yourtable > tr > td').has('.mandatory').each(function(){
   // "this" is the td
   var ind = $(this).index();
   var txt = $('#yourtable th:eq('+ind+')').html();
});

.has()メソッドを使用して、一致した td 要素のセットを子孫の「.mandatory」要素を持つものだけに減らしています。

.each()(もちろん、現在の行内ではなく、一致するすべての要素内のインデックスであるため、コールバックの index パラメータを使用することはできません(他の回答に示されているように)。)

于 2012-05-18T07:17:45.307 に答える
0

たとえば、これを確認してください:

 $.each(['first','second'], function(index, value) { 
      alert(index + ': ' + value); 
    });
于 2012-05-18T06:54:20.580 に答える