まず第一に、それぞれに返信ボタンがある場合は、div
実際にクラスを使用する必要があります。
id
は各ページに固有であると想定されていますが、クラスは複数のインスタンスを持つように設計されています。
何が起こっているのかというと、あなたの jQuery セレクター$("#reply")
は、最初のものを見つけて#reply
そこで停止しています。$("#box")
セレクターでも同じことが起こっています。#reply
s と#box
es を切り替えて、クラスを作成します。<div class="reply">
、次にセレクターを使用し$(".reply")
ます。#box
es でも同じ問題が発生します。
HTML の例がなければ、ここで行うべき最善の方法についてアドバイスすることはできません。しかし、ここに汎用ソリューションがあります:
JS フィドル
http://jsfiddle.net/Nveea/
HTML
<div id="reply-1" class="reply">Reply</div>`
<div id="box-1" class="box">box 1</div>
<hr />
<div id="reply-2" class="reply">Reply</div>
<div id="box-2" class="box">box 2</div>
CSS
.box
{
display:none;
}
JavaScript
$(".reply").click(function(){
//get the associated box
var index = $(this).attr("id").replace("reply-","");
//toggles show and hide
$("#box-" + index).toggle();
});
上記のソリューションでは、PHP である種の for ループを使用しており、反復インデックスを各reply
andbox
要素に挿入できると想定しています。HTML の例を提供すると、より良い解決策を提供できます。
toggle()
また、要素を display:hidden/block との間で切り替えるjQuery 関数の使用をお勧めします。あなたの場合、これは .toggleClass("hidden") よりも優れているかもしれません。