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

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

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

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

Q&A

解決済

4回答

1141閲覧

jQueryを使わずにクリックした要素以外にクラスが付いていた時、そのクラスを削除したい

aguu0101

総合スコア16

JavaScript

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

0グッド

0クリップ

投稿2019/07/10 09:27

編集2019/07/10 09:55

jQueryを使わず、純粋なJavaScriptのみでクラスの追加・削除を行いたいです。

追加すること、もう一度同じ要素をクリックすることでクラスの追加・削除を行うことはできるのですが、
「クリックした要素以外にクラスが付いていた場合、そのクラスを削除する」方法がわかりません。

HTML

1<div id="top-tabmenu-list"> 2 <ul> 3 <li class="top-tabmenu-item"><label for="tab-1">AAA</label></li> 4 <li class="top-tabmenu-item"><label for="tab-2"></i>BBB</label></li> 5 <li class="top-tabmenu-item"><label for="tab-3">CCC</label></li> 6 <li class="top-tabmenu-item"><label for="tab-4">DDD</label></li> 7 <li class="top-tabmenu-item"><label for="tab-5">EEE</label></li> 8 </ul> 9</div>

JavaScript

1function tabBar_animation(){ 2 var tabBar = document.querySelectorAll('#top-tabmenu-list li'); 3 for (var i = 0; i < tabBar.length; i++){ 4 tabBar[i].addEventListener("click", function(){ 5 this.classList.toggle('tab_link'); 6 }); 7 } 8 9} 10tabBar_animation();

追記情報

JavaScript

1function tabBar_animation(){ 2 var tabBar = document.querySelectorAll('#top-tabmenu-list li'); 3 for (var i = 0; i < tabBar.length; i++){ 4 tabBar[i].addEventListener("click", function(){ 5 var tabLink = document.querySelectorAll('.tab_link').length; 6 this.classList.toggle('tab_link'); 7 if ( tabLink > 1 ){ 8 this.classList.remove('tab_link'); 9 } 10 }); 11 } 12} 13tabBar_animation();

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

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

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

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

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

x_x

2019/07/11 04:15

要件が明確でないため、jQuery のコードがあるなら一緒に提示したほうがいいでしょう。
guest

回答4

0

ベストアンサー

html

1<div id="top-tabmenu-list"> 2 <ul> 3 <li class="top-tabmenu-item"><label for="tab-1">AAA</label></li> 4 <li class="top-tabmenu-item"><label for="tab-2"></i>BBB</label></li> 5 <li class="top-tabmenu-item"><label for="tab-3">CCC</label></li> 6 <li class="top-tabmenu-item"><label for="tab-4">DDD</label></li> 7 <li class="top-tabmenu-item"><label for="tab-5">EEE</label></li> 8 </ul> 9</div> 10<script> 11function tabBar_animation() { 12 var tabBar = document.querySelectorAll('#top-tabmenu-list li'); 13 tabBar.forEach(el => { 14 el.addEventListener('click', () => { 15 tabBar.forEach(el => { 16 el.classList.remove('tab_link'); 17 }); 18 el.classList.add('tab_link'); 19 }); 20 }); 21} 22tabBar_animation(); 23</script>

投稿2019/07/10 12:12

yasutomi

総合スコア2937

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

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

aguu0101

2019/07/11 04:09

ありがとうございます! そのままコピペでいけてしまいました。 なぜそうなってるのか正直わからないのでここは自分で調べてみます。
think49

2019/07/11 09:52

同じ要素を連続してクリックした際の挙動が考慮されていないように読めます。 質問コードのclassList.toggle()に倣うなら、全ての要素が .tab_link を持っていない状況があります。
yasutomi

2019/07/11 11:58

質問コードは質問者の意図とは異なるのでclassList.toggle()に倣う必要はないです。 > 質問コードのclassList.toggle()に倣うなら、 > 全ての要素が .tab_link を持っていない状況があります。
think49

2019/07/11 12:13

私の認識では、要件は下記でした。 > 追加すること、もう一度同じ要素をクリックすることでクラスの追加・削除を行うことはできるのですが、 < 「クリックした要素以外にクラスが付いていた場合、そのクラスを削除する」方法がわかりません。 「クリックした要素には必ずクラスを付ける」とい要件には読めなかったので、指摘した状況です。
guest

0

常に1つ以下の要素に .tab_link があるとするなら、「event.currentTarget.classList.contains('tab_link') の真偽値」で場合分けして考えれば、答えは出ます。

classList.contains('tab_link') === true

  1. 他の要素は .tab_link を持っていない
  2. event.currentTarget.classList.remove

classList.contains('tab_link') === false

  1. 他の要素は .tab_link を持っている可能性がある
  2. document.querySelector('.tab_link') がtruthyなら、当該要素ノードを classList.remove
  3. event.currentTarget.classList.add

Re: aguu0101 さん

投稿2019/07/10 10:16

編集2019/07/10 12:22
think49

総合スコア18162

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

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

aguu0101

2019/07/11 04:12

いただいた情報を元に修正したところ無事思っていた挙動ができました。 ありがとうございます。
guest

0

こんな感じ?

javascript

1<style> 2.top-tabmenu-item{color:red;} 3.tab_link{background-Color:yellow;} 4</style> 5 6<script> 7window.addEventListener('DOMContentLoaded', function(e){ 8 [].forEach.call(document.querySelectorAll('#top-tabmenu-list li'),function(x){ 9 x.addEventListener('click',function(e){ 10 const cls='tab_link'; 11 x.classList=x.classList.contains(cls)?[cls]:[]; 12 x.classList.toggle(cls); 13 }); 14 }); 15}); 16</script> 17<div id="top-tabmenu-list"> 18<ul> 19<li class="top-tabmenu-item"><label for="tab-1">AAA</label></li> 20<li class="top-tabmenu-item"><label for="tab-2"></i>BBB</label></li> 21<li class="top-tabmenu-item"><label for="tab-3">CCC</label></li> 22<li class="top-tabmenu-item"><label for="tab-4">DDD</label></li> 23<li class="top-tabmenu-item"><label for="tab-5">EEE</label></li> 24<li class="a b c d">XXX</li> 25<li class="a b c d tab_link">YYY</li> 26</ul> 27</div>

投稿2019/07/10 10:32

編集2019/07/10 10:33
yambejp

総合スコア114757

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

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

0

単に数えればいいのでは?

JavaScript

1document.querySelectorAll('.tab_link').length > 1

投稿2019/07/10 09:41

x_x

総合スコア13749

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

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

aguu0101

2019/07/10 09:56

回答ありがとうございます。 いただいた情報をもとにやってみましたが、できませんでした。 そもそも書き方が間違っているかもしれないので追記情報に試したコードを追加しています。 宜しくお願いします。
x_x

2019/07/11 02:07

要件が明確でないため、判定部分のみを提示しました。 「クリックした要素以外にクラスが付いていた場合」というのがクリックした要素には当然クラスがあると思っていたのですが、そうでない場合があるのであればその判定も必要です。 「そのクラスを削除する」 どこから削除するのか不明です。すべて削除するということならループを回してください。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問