これは最短のアプローチではないかもしれませんが、私の経験では、常に最も堅牢な方法です。jQuery のhide()
とshow()
は基本的にプロパティdisplay: none
とdisplay: block
(それぞれ) をチェーン先の要素に割り当てているからです。toggle()
は両方を組み合わせたようなものですが、まだ のみをサポートしていdisplay: block
ます。たとえば、 orの代わりにdisplay: inline
orを使用したい場合、望ましくない結果が生じる可能性があります。display: inline-block
display: block
したがって、私のアドバイスは次のとおりです。ではなく、常にクラスを使用して制御しCSS
JavaScript
ます。これにより、スタイルを完全に制御できます。次の例はうまく機能します。
HTML
<a class="click-trigger" href="#"></a>
<div class="element"></div>
JavaScript
var c = $('.click-trigger');
var e = $('.element');
c.click(function() {
if (e.hasClass('hidden')) {
e.removeClass('hidden').addClass('show');
} else {
e.removeClass('shown').addClass('hidden');
}
});
CSS
.click-trigger,
.element { height: 20px; width: 20px; }
.click-trigger { background-color: red; display: block; }
.element { background-color: blue; }
.hidden { display: none; }
.shown { display: block; }
/*
display alternatives not supported by jQuery's 'show()' nor 'toggle()':
display: inline;
display: inline-block;
display: list-item;
display: flex;
display: inline-flex;
display: table;
display: inline-table;
display: table-row-group;
display: table-column;
display: table-column-group;
display: table-header-group;
display: table-footer-group;
display: table-row;
display: table-cell;
display: table-caption;
*/
この例では、簡略化のためにマークアップが取り除かれています。ワーキングフィドル。