この show-hide 関数は、ターゲット div の一意の ID を維持する必要なく、匿名でこれを行おうとします。
var div
例 #4 でセレクターが機能しない理由と、表示されているすべての例でセレクターを機能させる方法を理解するのに苦労しています。
$('.expander').click(function(e)
{
e.preventDefault();
var div = $(this).nextAll('div.content').first();
if (div)
{
if (div.css('display') == "none")
{
div.show();
$(this).removeClass("closed");
$(this).addClass("open");
}
else
{
div.hide();
$(this).removeClass("open");
$(this).addClass("closed");
}
}
});
<div>
<a href="#" class="expander open">example 1</a><br />
<div class="content open">shown content</div>
<a href="#" class="expander closed">example 2</a><br />
<div class="content closed">hidden content</div>
<a href="#" class="expander closed">example 3</a><br />
<!-- comments -->
<span>other content</span>
<div class="content closed">hidden content</div>
<p>
<span>
<a href="#" class="expander closed">example 4</a>
</span>
</p>
<div class="content closed">content</div>
</div>
最初の 3 つの例は問題なく動作します。しかし、このコードを展開したところ、アンカーのコーディング方法にバリエーションがあることがわかりました。アンカーがどのようにカプセル化されているかに関係なく機能するソリューションを探しています。
肝心なのは、アンカーの次の div.content を選択したいということです。それが次であるかどうか、または jQuery がそれを見つけるために DOM ツリーを少し上る必要があるかどうかにかかわらずです。
このコードの作業モデルはこちらにあります。