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

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

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

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

Q&A

解決済

1回答

768閲覧

selectの項目を生成してコントロールしたい

cofcof

総合スコア37

jQuery

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

0グッド

0クリップ

投稿2021/08/26 13:50

まずjsonファイルなどからselect項目を生成し、次にselectで項目を選択すると、選択した内容の要素をHTMl上に生成されるようにしたい(最初から要素が生成されている場合もあり)です。
またその際、要素が生成されている項目はselectの内容から削除されるようにしたいと考えています。
そして新たに生成された要素を削除した場合には、再びselectの内容に入るようにしたいです。
jsonファイルからselectを生成することはできたのですが、
困っているのが選択した要素をselectから削除して、新たに要素を生成する方法と、要素が生成されている場合、selectからその内容を削除する方法が知りたいです。
またできれば、この内容をページ内に複数入れる予定ですので、スクリプトをある程度まとめられると理想的です。
(難しければそれぞれのスクリプトを記述予定です)

json

1[ 2 {"id":1,"value":"yasai_01","name":"きゅうり"}, 3 {"id":2,"value":"yasai_02","name":"ねぎ"}, 4 {"id":3,"value":"yasai_03","name":"レタス"}, 5 {"id":4,"value":"yasai_04","name":"ナス"}, 6 {"id":5,"value":"yasai_05","name":"トマト"}, 7 {"id":6,"value":"yasai_06","name":"キャベツ"} 8]

javascript

1$(function () { 2 $('.js-delete').click(function(){ 3 $(this).parent().remove(); 4 return false; 5 }); 6 7 $.getJSON("js/yasai.json" , function(diploma) { 8 var 9 ulObj = $(".js-select_yasai"), 10 len = diploma.length; 11 12 for(var i = 0; i < len; i++) { 13 ulObj.append($("<option>").attr({ 14 id:yasai[i].id, 15 value:yasai[i].value 16 }).text(yasai[i].name)); 17 } 18 }); 19 20}); 21

HTML

1<p id="yasai_02">ねぎ<a href="" class="js-delete">削除</a></p><!--最初から項目が作られている場合もあり--> 2<label class="form_select" for="form_select_yasai"> 3 <select class="js-select_yasai" id="form_select_yasai" name="yasai"> 4 <option value="野菜を追加" disabled selected>野菜を追加</option> 5 <!--この場合、ねぎが最初からあるので読み込んだjsonのリストからネギは外した形でoptionにそれ以外のものを流し込みたいです。 6 またoptionで例えばトマトなどを選択した場合、ねぎのpタグの下にトマトのpタグが作られ、optionのトマトは削除されるという挙動にしたいです。--> 7 </select> 8</label> 9※似たような内容で例えば果物などがこの後に出てくる想定です。

スクリプト内では、selectでoptionを選んだら、その内容を取得して、整形してpタグに出力し、
HTML内のyasaiとついたidを取得し、番号が一致するoptionをリストから削除するという流れなのかなと思っていますが、やり方がわかりません。

あまりスクリプトに詳しくないので、できればサンプルを書いていただけると嬉しいです。
お手数をおかけしますが、よろしくお願いいたします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

修正版

javascript

1<script> 2$(function () { 3 var yasai_all; 4 $.ajax({ 5 url:'yasai.json', 6 dataType:'json', 7 }).done(function(data){ 8 yasai_all=data; 9 view_yasai(); 10 }); 11 $('#main').on('click','.js-delete',function(e){ 12 e.preventDefault(); 13 $(this).closest('p').remove(); 14 view_yasai(); 15 }); 16 function view_yasai(){ 17 $('#form_select_yasai option:not(:first)').remove(); 18 $.each(yasai_all,function(){ 19 var name=$(this).get(0).name; 20 if($.inArray(name,get_yasai())==-1){ 21 $('#form_select_yasai').append($('<option>').val(name).text(name)); 22 } 23 }); 24 } 25 function get_yasai(){ 26 return $('.list').map(function(){ 27 return $(this).text(); 28 }).get(); 29 } 30 31 $('#form_select_yasai').on('change',function(){ 32 var idx=$(this).prop('selectedIndex'); 33 var val=$(this).val(); 34 $('#main').append($('<p>').append($('<span class="list">').text(val)).append($('<a href="#" class="js-delete">').text('削除'))); 35 $(this).find('option').eq(idx).remove(); 36 }); 37}); 38</script> 39<div id="main"> 40<p> 41<span class="list">ねぎ</span><a href="#" class="js-delete">削除</a> 42</p> 43<p> 44<span class="list">ナス</span><a href="#" class="js-delete">削除</a> 45</p> 46</div> 47<label class="form_select" for="form_select_yasai"> 48 <select class="js-select_yasai" id="form_select_yasai" name="yasai"> 49 <option value="野菜を追加">野菜を追加</option> 50 </select> 51</label>

投稿2021/08/27 00:48

編集2021/08/27 06:27
yambejp

総合スコア116441

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

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

cofcof

2021/08/27 06:03

丁寧なスクリプトありがとうございます! 大体理想どおりの動きをしたのですが、削除したpタグの項目はselectの選択肢に戻したいのです。 お手数おかけして申し訳ないのですが、そちらの修正方法も伺えると幸いです……!
yambejp

2021/08/27 06:29 編集

> pタグの項目はselectの選択肢に戻したい ざっと書き換えておきました
cofcof

2021/08/27 06:38

理想通りの動きでした!ありがとうございます!! 本当に助かりました! 内容読んで勉強させていただきます!!
cofcof

2021/09/04 08:56

すいません、一点だけ追加で質問させてください。 こちらFirefoxで見た場合にうまく動かないのですが、原因教えて頂くこと可能でしょうか? 色々調べてみたのですが解決出来ませんでした。。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.37%

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

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

質問する

関連した質問