2016-10-01 13 views
0

私は何をしようとしているのか明確に説明していませんでした。うまくいけば、これはより良いでしょう。リンクを含む複数のDivを表示/非表示

現在、私はthis Fiddleを使用していくつかのdivを切り替えています。アコーディオンとして機能し、一度に1つのdivのみを表示します。タイトルの1つをクリックするとそのdivの内容が表示され、別のタイトルをクリックすると最初のdivが非表示になり、そのタイトルが表示されます。

1つのdivを開くときに問題が起きました(そしてやりたいことは)最初のdivが閉じられるまで他のdivへのアクセスを非表示にしたいと思います。

「コンテンツ2」をクリックしてそのコンテンツを表示すると、コンテンツ2が再び閉じるまでコンテンツ1、コンテンツ3、およびコンテンツ4へのアクセスを非表示にしたいとします。

function ReverseDisplay(d) { 
 
    var els = document.querySelectorAll('.toggle.active:not(#' + d + ')'); 
 
    for (var i = 0; i < els.length; i++) { 
 
    els[i].classList.remove('active'); 
 
    } 
 
    document.getElementById(d).classList.toggle('active') 
 

 
}
.toggle { 
 
    display: none; 
 
} 
 
.toggle.active { 
 
    display: block; 
 
}
<a href="javascript:ReverseDisplay('content1')"> 
 
\t Content1 
 
</a> 
 
<a href="javascript:ReverseDisplay('content2')"> 
 
\t Content2 
 
</a> 
 
<a href="javascript:ReverseDisplay('content3')"> 
 
\t Content3 
 
</a> 
 
<a href="javascript:ReverseDisplay('content4')"> 
 
\t Content4 
 
</a> 
 

 
<div id="content1" class="toggle"> 
 
    <p>Content 1 goes here.</p> 
 
</div> 
 
<div id="content2" class="toggle"> 
 
    <p>Content 2 goes here.</p> 
 
</div> 
 
<div id="content3" class="toggle"> 
 
    <p>Content 3 goes here.</p> 
 
</div> 
 
<div id="content4" class="toggle"> 
 
    <p>Content 4 goes here.</p> 
 
</div>

+0

このリンクを再度開くにはどうすればよいですか? –

+0

これが可能なら質問がありますか?はい、確かに可能です。 –

+0

はい、可能です。あなた自身の試みをいくつか行い、問題が帰ってきたら、あなたの試みを表示してください。誰かがそれをデバッグして解決策を提示するかもしれないと確信しています。 – NewToJS

答えて

2

これは動作するはずです...要素を特定し、activeが存在するかどうかをチェックすることにより、クラスを追加するために渡されたidを使用してください。

function ReverseDisplay(d) { 
 
    var id = d 
 
    var el = document.getElementById(id) 
 
    var elClassList = el.classList 
 
    var [...active] = document.querySelectorAll('.toggle.active') 
 
    debugger 
 
    if (active.length === 0) { 
 
    el.classList.add('active') 
 
    } else if (id === active[0].id) { 
 
    el.classList.remove('active') 
 
    } 
 
}
.toggle { 
 
    display: none; 
 
    margin-top: 40px; 
 
} 
 
.toggle.active { 
 
    display: block; 
 
} 
 
a { 
 
    position: fixed; 
 
    top: 10px; 
 
}
<a href="javascript:ReverseDisplay('uniquename')"> 
 
    Click to show/hide. 
 
</a> 
 
<div id="uniquename" class="toggle"> 
 
    <p>Content 1 goes here.</p> 
 
</div> 
 

 
<a href="javascript:ReverseDisplay('uniquename1')" style="left:150px"> 
 
    Click to show/hide. 
 
</a> 
 
<div id="uniquename1" class="toggle"> 
 
    <p>Content 2 goes here.</p> 
 
</div>

+0

彼はアコーディオンの機能スタイルを要求していると思います。あるリンクをクリックするとそのdivを表示し、他のリンクをすべて非表示にします。私はその目的のための適切なコードであなたの答えを編集するつもりです。 – Dez

+1

@Dezこれは要件ではありません。自分の要件を推測しないでください。 –

+0

* "コンテンツを表示するために 'uniquename'をクリックすると、開いている間に 'uniquename1'へのリンクを非表示にできますか?" – Dez

0

あなたがしたいかもしれないほど多くのリンクのために、アコーディオンスタイル動作を実現するために、このjavascript関数を使用してください。

function ReverseDisplay(d) { 
    var els = document.getElementById(d); 
    if (els.classList.contains('active')){ 
    els.classList.remove('active'); 
    }else{ 
    var activeDivs = document.getElementsByClassName('active'); 
    for (var i = 0; i < activeDivs.length; i++) { 
     activeDivs[i].classList.remove('active'); 
     } 
    els.classList.add('active'); 
    } 
} 
+0

Dez、このスクリプトはリンクをクリックしてコンテンツ(div)を切り替えます。 1つがアクティブな間に残りのリンクを非表示にすることも可能ですか? – PthPndr

+0

それは可能ですが、それは有用でしょうか?残りのリンクがアクティブなときに非表示にすると、そのコンテンツの後半にどのようにアクセスする予定ですか? – Dez

+0

オープンdivをクローズします。アコーディオンとして機能するので、残りのリンクを見るためにdivを閉じるというアイデアがありました。 – PthPndr

関連する問題