問題は、インライン要素を非表示にして表示しようとしていることです。jQuery の効果は、ブロック タイプの要素でのみ機能します。jQuery エフェクトはインライン要素のスタイルを操作します。これが、そのバージョンが機能し、クラス バージョンが機能しない理由です。
考えてみれば、ブロック型要素は長方形です。高さや幅をアニメートするだけなので、拡大や縮小をアニメートするのは簡単です。
インライン要素は必ずしも四角形であるとは限りません。そのため、jQuery の効果はほとんど機能しません。例を挙げると:
<p>Inside paragraph <span class="foo">This is a test</span> contains text.</p>
<input type="button" id="bar" value="Toggle">
走る:
$(function() {
$("#bar").click(function() {
$("span.foo").toggle();
});
});
最初のクリックで非表示になります。2番目はブロックに変換します(段落に含まれなくなります)。これが、jQuery の効果がインライン要素で実際に機能しないということです。
内部的には、jQuery の効果は、アニメーションと と の間のトグルの組み合わせによって機能しdisplay: none
ますdisplay: block
。これが意味することは、jQuery の効果は表のセルでも機能しないということです。なんで?そうではなくdisplay: block
、効果的display: table-cell
です。toggle()
これを自分で試して、表のセルを数回実行した後に何が起こるかを確認してください。
それで、解決策は何ですか?インライン コンテンツの場合、最も簡単な解決策はクラスを使用することです。
hidden { display: none; }
と
$("span.hideme").toggleClass("hidden");
これにはアニメーション効果はありません。animate()
これは自分で追加できますが、インライン要素でうまく機能するかどうかは 100% ではありません。
または、コンテンツがブロックになる可能性がある場合は、ブロックにすれば、これらの問題はすべて解消されます。あなたの場合、 a の<div>
代わりに a を使用するか、に<span>
追加display: block
し<span>
ます。