2017-07-10 33 views
-1

JSコードを短縮する方法はありますか?バニラJSではJqueryでなくてもかまいません。DRY - 兄弟要素

ここでは、次の兄弟概念と以前の兄弟概念は使用できません。 previousElementSiblingとnextElementSiblingコンセプトの作品が、選択はあなたがJSコードを一般化することができ、より3

\t document.getElementById("network_tab").addEventListener("click", function(){ 
 
\t \t this.classList.add('active'); 
 
\t \t document.getElementById("network_tag_tab").classList.remove('active'); 
 
\t \t document.getElementById("device_tab").classList.remove('active'); 
 
\t }); 
 
\t 
 
\t document.getElementById("network_tag_tab").addEventListener("click", function(){ 
 
\t \t this.classList.add('active'); 
 
\t \t document.getElementById("network_tab").classList.remove('active'); 
 
\t \t document.getElementById("device_tab").classList.remove('active'); 
 
\t }); 
 

 
\t document.getElementById("device_tab").addEventListener("click", function(){ 
 
\t \t this.classList.add('active'); 
 
\t \t document.getElementById("network_tag_tab").classList.remove('active'); 
 
\t \t document.getElementById("network_tab").classList.remove('active'); 
 
\t }); \t
.active{ 
 
border: 5px solid black; 
 
padding: 10px; 
 
}
\t \t <table id="nav-table"> 
 
\t \t \t <tbody> 
 
\t \t \t <tr> 
 
\t \t \t \t <td id="network_tab" class="org_overview_tab active"><a href="#">Networks</a></td> 
 
\t \t \t \t <td id="network_tag_tab" class="org_overview_tab"><a href="#">Network tags</a></td> 
 
\t \t \t \t <td id="device_tab" class="org_overview_tab left-border"><a href="#">Devices</a></td> 
 
    
 
\t \t \t </tr> 
 
\t \t \t </tbody> 
 
\t \t </table>

+1

はコードを示す、とスニペットを提供いただきありがとうございますが、どこのコードは間違って行くのですか?この要件を処理するための汎用関数をどこまで手に入れましたか? –

+0

コードは動作しますが、もしそれがあれば –

答えて

2

一つだけのEventListenerを必要とする...

document.getElementById('nav-table').addEventListener('click', e => { 
    if (e.target.nodeName== 'A'){ 
    document.querySelector('.active').classList.remove('active'); 
    e.target.parentNode.classList.add('active'); 
    } 
}); 
+0

ではなくidに基づいてアクセスする必要があります。ありがとう –

+0

カラムのノード名を取得する方法 - td –

+0

'console.log(e.target.parentNode.id);' –

0

ということであれば何。そうすれば、タブを追加してもJSを変更せずに動作します。以下のコードを確認してください。

var tabs = document.querySelectorAll('.org_overview_tab'); 
 
for(var index=0;index<tabs.length;index++) { 
 
    tabs[index].addEventListener('click', function(){ 
 
    document.querySelector('.active').classList.remove('active'); 
 
    this.classList.add('active'); 
 
}); 
 
}
.active{ 
 
border: 5px solid black; 
 
padding: 10px; 
 
}
\t \t <table id="nav-table"> 
 
\t \t \t <tbody> 
 
\t \t \t <tr> 
 
\t \t \t \t <td id="network_tab" class="org_overview_tab active"><a href="#">Networks</a></td> 
 
\t \t \t \t <td id="network_tag_tab" class="org_overview_tab"><a href="#">Network tags</a></td> 
 
\t \t \t \t <td id="device_tab" class="org_overview_tab left-border"><a href="#">Devices</a></td> 
 
    
 
\t \t \t </tr> 
 
\t \t \t </tbody> 
 
\t \t </table>

+0

でもDRY形式が必要ですが、クラス –

関連する問題