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

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

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

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

JavaScript

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

jQuery

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

Q&A

解決済

3回答

632閲覧

jQueryの各変数の共通部分を、短くまとめる方法

yayak

総合スコア66

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

JavaScript

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

jQuery

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

0グッド

0クリップ

投稿2020/01/31 01:26

【場面】
以下のようなHTMLがあったとき、各ボタンを押すとそれに対応したhtmlを挿入したいと考えています。
【解決したいこと】
jQueryの各変数の共通部分を、どうにかして短くまとめたい。

//html <div class="add_name1">名前1を追加するボタン</div> <div class="add_name2">名前2を追加するボタン</div> <div class="add_name3">名前3を追加するボタン</div>
//jQuery var name1 = ` <div class="sample"> <input type="text" name="name1[]"> </div> `; var name2 = ` <div class="sample"> <input type="text" name="name2[]"> </div> `; var name3 = ` <div class="sample"> <input type="text" name="name3[]"> </div> `; // 名前1を追加するボタンが押されたとき $('.add_name1').on('click',function(){ $(this).after(name1); }); // 名前2を追加するボタンが押されたとき $('.add_name2').on('click',function(){ $(this).after(name2); }); // 名前3を追加するボタンが押されたとき $('.add_name3').on('click',function(){ $(this).after(name3); });

上記のコードで、確かに想定した動き(各ボタンを押すとそれに対応したhtmlを挿入)ができるのですが、どうしても気になることがあります。

それは、各varの中の「<div class="sample">」「</div>」が何度もコード内に出てくることです

関数などを使って、何回も「<div class="sample">」「</div>」を書かなくて済む方法があれば知りたいのですが、どのように書けばよいかわかりません。

例えば、phpなら、以下のように書けばいいと思うのですが、jQueryでの書き方がわかりません。

//php function hoge($name){ echo '<div class="sample"><input type="text" name="'.$name.'[]"></div>'; } //関数hoge($name)を使用することで、何度も同じコード(div class="sample">~)を書かなくて済む $name1 = hoge('name1'); $name2 = hoge('name2'); $name3 = hoge('name3');

初歩的な質問で大変お恥ずかしいのですが、ご存知の方がいらっしゃいましたら、どうかご教授いただけましたら幸いです。

何卒、よろしくお願いいたします。

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

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

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

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

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

guest

回答3

0

ベストアンサー

もしHTMLを変更できない事情があるなら質問者さんのphpコード(のjs移植)も利用してこれで

JavaScript

1function hoge(name) { 2 return `<div class="sample"><input type="text" name="${name}[]"></div>`; 3} 4 5$('.add_name1, .add_name2, .add_name3').on('click', function(){ 6 $(this).after(hoge(this.className.replace('add_', ''))); 7});

投稿2020/01/31 02:14

shinji709

総合スコア805

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

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

yayak

2020/02/01 01:06

jqueryの関数の使い方がずばりわかり、感謝申し上げます。 有難うございます!まさに知りたいと思っていたコードです!
guest

0

jQueryの問題ではないように思います。

yambejpさんが答えてらっしゃる内容にかぶりますが、ボタン(今の場合div)のクラスについては共通にし、別途なんらか固有のデータを持たせるほうが良いと思います。

私の場合、idを振っています。

また重複の記述を嫌うことについては、javascriptで関数化して動的に生成するのが良いと思います。

例の場合は、idをそのままnameとして埋め込んでいます。

html

1 <div class="add_name" id="name1">no1</div> 2 <div class="add_name" id="name2">no2</div> 3 <div class="add_name" id="name3">no3</div>

javascript

1 2$('.add_name').on('click',function(){ 3 4 $(this).after(function(id){ 5 let adddiv = `<div class="sample"> 6 <input type="text" name="${id}"> 7    </div>`; 8 return adddiv; 9 10 }(this.id)); 11}); 12

投稿2020/01/31 02:01

Yasuhiro

総合スコア46

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

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

yayak

2020/02/01 01:01

letの使い方、はじめて知りました! 本当に勉強不足を痛感します、、 丁寧でわかりやすい回答をくださり有難うございます!
guest

0

クラスを統一し、カスタムデータをつけると管理が楽かも
nameも変数名を変えずに共用で処理するとよいでしょう

投稿2020/01/31 01:35

編集2020/01/31 01:38
yambejp

総合スコア114810

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

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

yambejp

2020/01/31 01:35

<div class="add_name" data-add="1">名前1を追加するボタン</div> <div class="add_name" data-add="2">名前2を追加するボタン</div> <div class="add_name" data-add="3">名前3を追加するボタン</div>
yambejp

2020/01/31 01:52

ちなみに今の仕様ですとクリックするたびにinputが追加されていきますが そうではなく、例えばもう一度クリックするとinputが削除されるとか もう一度クリックしても複数は追加されないとか 仕様が違うなら指示ください
yayak

2020/02/01 01:04

本当にスマートなコードで、ただただ感動を覚えます。 こんな発想もあるのかと勉強になりました、本当に感謝いたします。 有難うございます!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問