次のようなHTML構造があるとします。
<tr> <th>なんとか</th> <td class="old"><input type="text" id="test_old" name="test" value="aa" /></td> <td class="new"><input type="text" id="test_new" name="test_new" value="" /></td> </tr> <tr> <th>かんとか</th> <td class="old"> <p>あああ</p> <input type="text" id="hoge_old" name="hoge" value="aaaaa" /> </td> <td class="new"> <p>いいい</p> <input type="text" id="hoge_new" name="hoge_new" value="" /> </td> </tr>
ページ読み込みが完了した時に、
これらのidが_newで終わる要素全てのvalueが0だった場合、
各要素のidと前方一致するidが_oldで終わる要素のvalueを、
_newに挿入する、ということがしたいです。
で、作ったスクリプトが下記なのですが…
$(function(){ // ページ読み込みが完了した時に、 if($('[id$=_new]').val().length == 0){ // idが_newで終わる要素全てのvalueが0だった場合、 $('[id$=_new]').each(function(){ // 各要素のidと前方一致するidが_oldで終わる要素のvalueを、 $(this).val($('[id$=_old]').val()); // _newに挿入する }); } });
これだと、最初の_oldのvalue(つまりid="test_old"のvalue)しか各要素に入ってきません。
test_oldの値をtest_newに、hoge_oldの値をhoge_newに代入したいのです。
あと欲を言えば、_oldっていう名前はつけずに、
id="test"の値をid="test_new"に代入できればいいのですが、方法が思いつかなかったので今のところ_oldをつけています。
上記、何か良い方法はないでしょうか?
納期が迫っており、結構困っています。よろしくお願いいたします。
追記
kei344様
返信ありがとうございます。
$(this) のid属性を取得して、_newを_oldに置換してそれをセレクタにする
その手がありましたね!頂いたアドバイスを元に以下のスクリプトで期待動作をすることを確認しました。
また、id名に_oldなど書かなくても可能なので、既存フォームを修正する必要もなく助かります。
ありがとうございました。またよろしくお願いいたします。
// ページ読み込み完了時に、id末尾に'_new'とつく要素のvalueが全てなかった場合 if($('[id$=_new]').val().length == 0){ $('[id$=_new]').each(function(){ var new_id = $(this).attr('id'); // 各要素のid名を取得 var old_id = new_id.replace(/_new/g, ''); // 各要素のid名から'_new'の文字列を除去 var old_val = $('[id ^= ' + old_id + ']').val(); $(this).val(old_val); }); }
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。