今のコードですとボタンを押すたびに要素が表示されたままになりますので、クリックで呼び出される要素以外は消えて欲しいです。Aは最初から表示されている設定です。
html
1 <button data-id="typeA" class="typeA">Aを表示するボタン</button> 2 <button data-id="typeB" class="typeB">Bを表示するボタン</button> 3 <button data-id="typeC" class="typeC">Cを表示するボタン</button> 4 5 <div class="box" id="typeA" >Aが表示された</div> 6 <div class="box" id="typeB" style="display: none;">Bが表示された</div> 7 <div class="box" id="typeC" style="display: none;">Cが表示された</div>
JavaScript
1 document.addEventListener('click', e=>{ 2 const t=e.target; 3 if(t.matches('[data-id]')){ //クリックしたボタンにdata-id属性があった場合、 4 5 var v1=document.querySelector(`#${t.dataset.id}`); //クリックされたデータ属性と同じ名前のIDを取得し、 6 v1.style.display="block"; //その要素を表示する 7 8 var v2=document.querySelectorAll('.box:not(v1)'); //「上記(v1)で取得した要素以外」でclass=boxが付いている要素を全て取得して、 9 v2.style.display="none"; //その要素を非表示にする 10 11 } 12 });
理屈上、これでタブの切り替えのようなことが出来ると思ったのですが8行目でエラーが出ていてv2の定義が間違っているそうです。
「v1で取得した要素以外でclass=boxが付いている要素を全て取得」を正しく定義するにはどのような方法がありますか?
どのようなエラーでしょうか。
コピペで提示してください。

回答2件
あなたの回答
tips
プレビュー