2017-04-01 10 views
0
const offCanvasLinks = document.querySelectorAll('.off-canvas__link'); 

    [].forEach.call(offCanvasLinks, function(link) { 
     link.addEventListener('click', (event) => { 
      const typeVal = link.getAttribute('data-type') 

      if (typeVal === "star") { 
       document.querySelector('[data-star-links]').classList.toggle('active'); 
      } else if (typeVal === "how-to") { 
       document.querySelector('[data-how-to]').classList.toggle('active'); 
      } else { 
       document.querySelector('[data-presenters]').classList.toggle('active'); 
      } 
     }) 
    }); 

私はナビゲーションをクリックしてアクティブなクラスを切り替える上記のコードを持っています。Javascript - クリックされている要素に既にアクティブなクラスがない限り、すべてのアクティブなクラスを削除する方法

ナビゲーション内の別の要素をクリックすると、クリックされた要素に既にアクティブなクラスがない限り、すべてのアクティブなクラスを削除する必要があります。

Jqueryでは、これは非常に簡単です.Not()を使用できます。イベントターゲットを通過して、他のすべてのアクティブなクラスをチェックして削除することができます。

これをもっと明確にするには、クリックされた要素に既にアクティブなクラスがない限り、すべてのアクティブなクラスを削除する方法があります。

は、更新***********私は自分の考えを知ってみましょう****************** [OK]をクリックして... 一番下のリンクには、別のリンクをクリックすると、前のリンクを閉じて次のリンクを開くと、うまく画面が表示されます。ただし、同じリンクをクリックしてもメニューは閉じません。

既に開いているクラスを削除するにはどうすればよいですか?

リンク:このようなhttps://jsfiddle.net/2oqm0r2n/3/

+0

に...

container.classList.toggle('active', typeVal === containerVal && !container.classList.contains('active')); 

を実行時に何も表示されないのであまり役に立ちません。 – trincot

+0

私はJsfiddle Trincotを更新して、私の問題を見ることができます.Keenはこれを解決しました – MaxwellLynn

+0

こんにちはTrincot、私はちょうど私の質問を更新しました。私はこれが今より意味をなさないことを望む。 – MaxwellLynn

答えて

1

、あなたがクリックされた項目に対応する要素のトグルアクティブクラスにしたい、とあなたはしたいアクティブを削除他のすべての要素からのクラス。

次のようにあなたが行うことができますこの:

if (typeVal === containerVal) { 
    container.classList.toggle('active') 
    } else { 
    container.classList.remove('active') 
    } 

あなたupdated fiddle

または1つ "行" で参照してください:フィドルがあるthis fiddle

+0

あなたは伝説です。悪い説明のためのお詫び。 – MaxwellLynn

+0

問題はありません。あなたを歓迎します;-) – trincot

2

多分何か?例えば

:私が正しく理解していれば

// unless the clicked on element has already an active class 
if(!link.classList.contains('active')){ 
    // remove all active classes 
    var actives = document.querySelectorAll('.active'); 
    [].forEach.call(actives, function(elem) { 
     elem.classList.remove("active"); 
    }); 
} 
+0

Nahクラスを切り替える必要があるため、これは機能しません。アクティブになっている場合はすべてを削除し、クリックしたものを再びアクティブにします。 – MaxwellLynn

+0

ちょっとあなたの編集を見て – MaxwellLynn

+0

私はifチェックでコードを更新しました。多分私はそれを間違って理解しました。 –

関連する問題