質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

Q&A

解決済

1回答

15363閲覧

jQueryでidが部分一致する要素の値を代入する方法を教えて下さい

qwe001

総合スコア133

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

0グッド

0クリップ

投稿2016/12/17 04:57

編集2016/12/17 07:48

次のような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); }); }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

JavaScript

1if ( $( '[id$=_new][value=""]' ).length == 0 ) { /* 空の場合 */ }

また、下記では「_old」で終わるid属性を持つ最初の値を入れてしまいます。$(this) のid属性を取得して、_newを_oldに置換してそれをセレクタにする必要があるのでは。

JavaScript

1$(this).val($('[id$=_old]').val());

投稿2016/12/17 06:14

kei344

総合スコア69407

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問