お世話になっております。
当方Laravel5.5にてWebSiteを構築しております、
環境はWindows、ブラウザはIEです。
背景
あるセレクトボックスの内容に基づいて、
別のセレクトボックスのoption要素を表示・非表示させる仕組みを作っています。
(あるセレクトボックスで関東を選択すると、別のセレクトボックスで、
岩手などは他地域が非表示になり、千葉や東京が表示されるイメージです。
本件ではわかりやすいように地域のセレクトボックスと
県のセレクトボックスを扱っているものとしてご質問します)
IE Chrome Edge全てに対応したいので、
hiddenのtrue/falseではなく、<span class="wrap">
の着脱で表示非表示をコントロールしようとしています。
(もともとはhiddenでコントロールしていましたが、
只今改修を行っています)
また、当初、テンプレートを使用して上記仕組みを構築しましたので、
(初心者のため元からある部分を改変することは避けたいので)
今取得できている変数が下記の条件である、という下で実装したいです。
<取得できているもの>
・全(表示にすべき要素も非表示にすべき要素も含めた)
option要素の配列(「belongers」と名称をつけています、
中身は
0: option.~
1: option.~
2: option.~
・・・
といった形です)
・非表示にすべきoption要素の配列(「nonbelongers」と名称をつけています、
中身は上記と同じくoptionの羅列です)
なお、hiddenで表示をコントロールしていた際は、
jQuery
1belongers.prop('hidden', null) 2nonbelongers.prop('hidden', true)
で対応していました。
やりたいこと
belongersとnonbelongersを使って、下記2つを
実現するロジックを組みたいです。
①option要素の親要素にwrapがある場合かつ
表示対象(belongersとnonbelongersの差分にあたる)
である場合は、unwrapする
②option要素の親要素にwrapがない場合かつ
nonbelongersである場合は、wrapをかける
現状
下記の通りですが、1回目の地域の指定はうまくいきますが、
1回目の地域の指定の後別の地域に変更(地域のセレクトボックスをクリック)した場合、
bwrapには、親要素がwrapのものとunwrapのものがまざるため、
まとめてunwrapしてしまうと、余計な要素が削除されてしまうのが課題です。
jQuery
1const bwrap = belongers.parents().attr("class") 2const nbwrap = nonbelongers.parents().attr("class") 3 4if(bwrap == "wrap") 5{ 6belongers.unwrap(); 7} 8if(nbwrap !== "wrap") 9{ 10nonbelongers.wrap("<span class='wrap'>"); 11}
参考にしているもの
https://qiita.com/bubbles/items/cdf9e8431f67d01f7cf8
こちらを参考に実装していますが、
こちらの記載はoption要素一つ一つに対してwrapの指定をしているのに対して、
私の場合は配列に対してwrapの指定をかけるので、
2回目以降にwrapしたりunwrapする場合に、
配列の中wrapされたものとunwrapなものが混在し、
正しい処理ができません。
(unwrapなoption要素が1つでも混じっている
状態で配列にunwrapをかけると、本来消してはいけない
親要素が消えてしまいます)
jQueryに関して全くの初心者のため、
文字による説明が多くなってしまい大変恐縮なのですが
(ブラウザの開発者ツールに出力されたoption要素などは1つの要素の中に大量に
項目があり、どこからどこまでを転載すればよいのか判断がつかず、
文字のほうがわかりやすいと判断しております)、
宜しくお願い致します。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。