予め代替用のHTML要素をつくっておいて入れ替えるのが妥当
optionの非表示はブラウザによっては反映されません
javascript
1<script>
2window.addEventListener('DOMContentLoaded', ()=>{
3 const s1=document.querySelector('#s1');
4 const s2=s1.cloneNode(true);
5 const p=s1.parentNode;
6 s2.setAttribute('id','s2');
7 s2.querySelectorAll('.hide').forEach(x=>x.remove());
8 document.querySelector('#color').addEventListener('change',()=>{
9 if([...p.children].includes(s1)){
10 p.insertBefore(s2,s1);
11 s1.remove();
12 }else{
13 p.insertBefore(s1,s2);
14 s2.remove();
15 }
16 });
17});
18</script>
19<label><input type="checkbox" id="color" name="color"> カラー</label>
20<label>
21<select id="s1">
22<option value="white" class="hide">白</option>
23<option value="red">赤</option>
24<option value="block" class="hide">黒</option>
25</select>
26</label>
調整版
jaascript
1<script>
2window.addEventListener('DOMContentLoaded', ()=>{
3 const s1=document.querySelector('#s1');
4 const s2=s1.cloneNode(true);
5 const p=s1.parentNode;
6 s2.setAttribute('id','s2');
7 s2.querySelectorAll('.hide').forEach(x=>x.remove());
8 document.querySelector('#color').addEventListener('change',()=>{
9 if([...p.children].includes(s1)){
10 p.insertBefore(s2,s1);
11 s1.remove();
12 }else{
13 p.insertBefore(s1,s2);
14 s2.remove();
15 }
16 });
17 document.addEventListener('change',()=>{
18 const color=document.querySelector('#s1,#s2').value;
19 document.querySelectorAll('.s1_select').forEach(x=>{
20 x.style.display='none';
21 x.querySelector('select').disabled=true;
22 });
23 document.querySelector('#'+color).style.display='';
24 document.querySelector('#'+color+" select").disabled=false;
25 ;
26 });
27});
28</script>
29<label><input type="checkbox" id="color" name="color"> カラー</label>
30<label>
31<select id="s1">
32<option value="white" class="hide">白</option>
33<option value="red">赤</option>
34<option value="black" class="hide">黒</option>
35</select>
36</label>
37
38<div class="s1_select" id="white">
39<label>
40<select>
41<option value="white1">WHITE1</option>
42<option value="white2">WHITE2</option>
43</select>
44</label>
45</div>
46
47<div class="s1_select" id="red" style="display:none">
48<label>
49<select disabled>
50<option value="red1">RED1</option>
51<option value="red2">RED2</option>
52</select>
53</label>
54</div>
55
56<div class="s1_select" id="black" style="display:none">
57<label>
58<select disabled>
59<option value="black1">BLACK1</option>
60<option value="black2">BLACK2</option>
61</select>
62</label>
63</div>
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/03/20 05:32
2021/03/20 07:52
2021/03/20 09:00