2016-08-04 7 views
0

問題の名前を正しく指定する方法がわからないので、誤解を招くようなタイトルの場合は謝ります。jQueryを繰り返して.each()を実行し、最初の.each()に基づいて繰り返しIDを与えます。

私は私がsidebar menuユーザーにどのli data-idに応じて、他のファイルからajaxでロードしています(30〜周り)tablesのリストをクリックするとされています。 tableにはそれぞれidがあり、それぞれinputはにあり、idtable idとなり、入力数はtableとなります。

すなわち:table#id_1は(それは、この特定のtableで第三inputだCUS input2input#id_1--input2を持っています。

私は手動で書き込みを行うことができますが、私はlistの真ん中に行く新しいtable私はtable'sの半分のように書き換える必要があります追加したくなりますので、もし私は、アルファベット順に私のリストをソートすることだし、 input'sid'sbig nayです。

ので、私はそれが+ input idを設定する(のような上記の例ではとのeffect i wantinputの終わりに、それのインデックスを追加することができますtableid attributeを追加できる機能を取得しようとしているとtable idに基づいていますスニペットの最後)。

var div = $('table'); 
 

 
div.each(function(index){ 
 
    var inputid = index - 2; 
 
    
 
    $(this).attr('id', 'id_'+index); 
 
    
 
    $('input').each(function(inputIndex){ 
 
    \t $(this).attr('id', 'id_'+inputid+'-input'+inputIndex); 
 
    }); 
 
});
div{ 
 
    margin-bottom: 20px; 
 
} 
 

 
span{ 
 
    background-color: black; 
 
    color: white; 
 
    padding: 2px; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<span>The effect i'm receiving:</span> 
 
<div> 
 
Table 1 //#id_0 
 
    <table> 
 
    <tr><td> 
 
     <label for="">item</label> 
 
     <input type="number"> //id_0-input0 
 
    </td></tr> 
 
    <tr><td> 
 
     <label for="">item</label> 
 
     <input type="number"> //id_0-input1 
 
    </td></tr> 
 
    <tr><td> 
 
     <label for="">item</label> 
 
     <input type="number"> //id_0-input2 
 
    </td></tr> 
 
    </table> 
 
</div> 
 

 
<div> 
 
Table 2 //#id_1 
 
    <table> 
 
    <tr><td> 
 
     <label for="">item</label> 
 
     <input type="number"> //id_0-input3 
 
    </td></tr> 
 
    <tr><td> 
 
     <label for="">item</label> 
 
     <input type="number"> //id_0-input4 
 
    </td></tr> 
 
    </table> 
 
</div> 
 

 
<div> 
 
Table 3 //#id_2 
 
    <table> 
 
    <tr><td> 
 
     <label for="">item</label> 
 
     <input type="number"> ... 
 
    </td></tr> 
 
    <tr><td> 
 
     <label for="">item</label> 
 
     <input type="number"> ... 
 
    </td></tr> 
 
    <tr><td> 
 
     <label for="">item</label> 
 
     <input type="number"> //input_0-input7 
 
    </td></tr> 
 
    </table> 
 
</div> 
 

 
<span>The effect I want:</span> 
 
<div> 
 
Table 1 //#id_0 
 
    <table> 
 
    <tr><td> 
 
     <label for="">item</label> 
 
     <input type="number"> //id_0-input0 
 
    </td></tr> 
 
    <tr><td> 
 
     <label for="">item</label> 
 
     <input type="number"> //id_0-input1 
 
    </td></tr> 
 
    <tr><td> 
 
     <label for="">item</label> 
 
     <input type="number"> //id_0-input2 
 
    </td></tr> 
 
    </table> 
 
</div> 
 

 
<div> 
 
Table 2 //#id_1 
 
    <table> 
 
    <tr><td> 
 
     <label for="">item</label> 
 
     <input type="number"> //id_1-input0 
 
    </td></tr> 
 
    <tr><td> 
 
     <label for="">item</label> 
 
     <input type="number"> //id_1-input1 
 
    </td></tr> 
 
    </table> 
 
</div> 
 

 
<div> 
 
Table 3 //#id_2 
 
    <table> 
 
    <tr><td> 
 
     <label for="">item</label> 
 
     <input type="number"> //id_2-input0 
 
    </td></tr> 
 
    <tr><td> 
 
     <label for="">item</label> 
 
     <input type="number"> //id_2-input1 
 
    </td></tr> 
 
    <tr><td> 
 
     <label for="">item</label> 
 
     <input type="number"> //id_2-input2 
 
    </td></tr> 
 
    </table> 
 
</div>

+0

あなたは何をしようとしていますか?なぜそれらの特定の 'ID'が必要なのですか? – Adjit

+0

まあ、正直言って、 'クラス'にすることもできます。これは、高度な物理計算機(ブラックホール温度を計算できるような)です。私は練習をしています。各テーブルには、独自の計算式と独自の計算式があります。なぜ私はそれがそれぞれの値を取得し、特定の数式を計算する必要があるので、私は多くの入力を持っている。 – nehel

答えて

3
これにあなたのjavascriptのコードを変更し

:fourthe最後の行は、あなたが私たちはすべてのを繰り返し強調している

$(this).find('input').each(...)

ある

var div = $('table'); 

div.each(function(index){ 
    var inputid = index; 

    $(this).attr('id', 'id_'+index); 

    $(this).find('input').each(function(inputIndex){ 
    $(this).attr('id', 'id_'+inputid+'-input'+inputIndex); 
    }); 
}); 

お知らせもう一度、私たちは反復処理を行っていたdivinputを反復するだけです。

ユーザーS McCrohanがコメントで述べたように


var inputid = index - 2;
は不要であり、次のようになります。
var inputid = index;

編集https://jsfiddle.net/xxL5tuvw/

+0

私にそれを打つ。しかし、望みの例で正確な形をしたいのであれば 'index-2'を' index'に修正するべきです。 (または、その行を完全に削除して、下の参照を修正してください) –

+0

私の回答を編集する必要がありますか、あなたのコメントで十分でしょうか? –

+0

@TimvanOsch私はそれを修正します、あなたの答え、時間とそれの説明に感謝!それを感謝します(: – nehel

1

var div = $('div'); 
 

 
div.each(function(index){ 
 
    $(this).attr('id', 'id_'+index); 
 
    
 
    $('input', this).each(function(inputIndex){ 
 
    var id = 'id_'+index+'-input'+inputIndex; 
 
    $(this).attr('id', id).after('<span>' + id+ '</span>'); 
 
    // above .after() to show the id, u can remove it 
 
    }); 
 
});
div{ 
 
    margin-bottom: 20px; 
 
} 
 

 
span{ 
 
    background-color: black; 
 
    color: white; 
 
    padding: 2px; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<span>The effect i'm receiving:</span> 
 
<div> 
 
Table 1 //#id_0 
 
    <table> 
 
    <tr><td> 
 
     <label for="">item</label> 
 
     <input type="number"> 
 
    </td></tr> 
 
    <tr><td> 
 
     <label for="">item</label> 
 
     <input type="number"> 
 
    </td></tr> 
 
    <tr><td> 
 
     <label for="">item</label> 
 
     <input type="number"> 
 
    </td></tr> 
 
    </table> 
 
</div> 
 

 
<div> 
 
Table 2 //#id_1 
 
    <table> 
 
    <tr><td> 
 
     <label for="">item</label> 
 
     <input type="number"> 
 
    </td></tr> 
 
    <tr><td> 
 
     <label for="">item</label> 
 
     <input type="number"> 
 
    </td></tr> 
 
    </table> 
 
</div> 
 

 
<div> 
 
Table 3 //#id_2 
 
    <table> 
 
    <tr><td> 
 
     <label for="">item</label> 
 
     <input type="number"> 
 
    </td></tr> 
 
    <tr><td> 
 
     <label for="">item</label> 
 
     <input type="number"> 
 
    </td></tr> 
 
    <tr><td> 
 
     <label for="">item</label> 
 
     <input type="number"> 
 
    </td></tr> 
 
    </table> 
 
</div>

関連する問題