JQueryを使用して3つの異なるテーブルにアコーディオン効果を実装するのが困難であり、いくつかの支援を利用できます。今のところうまくいきますヘッダー行をクリックすると、後続の行が表示されますが、何らかのアニメーションが必要です。また、最初のテーブルを完全に表示したいと思いますが、私は初心者であり、これは私の頭の上にあります。
これが私のHTMLです。
<table class="research">
<tbody>
<tr class="accordion">
<td colspan="3">This is the header</td>
</tr>
<tr>
<td>Research</td>
<td>Description</td>
<td>Partner</td>
</tr>
<tr>
<td>Lorem ipsum dolor sit amet, consectetuer adipiscing elit.</td>
<td>Lorem ipsum dolor sit amet, consectetuer adipiscing elit.</td>
<td>Lorem ipsum dolor sit amet, consectetuer adipiscing elit.</td>
</tr>
</tbody>
</table>
<table class="research">
<tbody>
<tr class="accordion">
<td colspan="3">This is the header</td>
</tr>
<tr>
<td>Research</td>
<td>Description</td>
<td>Partner</td>
</tr>
<tr>
<td>Lorem ipsum dolor sit amet, consectetuer adipiscing elit.</td>
<td>Lorem ipsum dolor sit amet, consectetuer adipiscing elit.</td>
<td>Lorem ipsum dolor sit amet, consectetuer adipiscing elit.</td>
</tr>
</tbody>
</table>
<table class="research">
<tbody>
<tr class="accordion">
<td colspan="3">This is the header</td>
</tr>
<tr>
<td>Research</td>
<td>Description</td>
<td>Partner</td>
</tr>
<tr>
<td>Lorem ipsum dolor sit amet, consectetuer adipiscing elit.</td>
<td>Lorem ipsum dolor sit amet, consectetuer adipiscing elit.</td>
<td>Lorem ipsum dolor sit amet, consectetuer adipiscing elit.</td>
</tr>
</tbody>
</table>
そして、これが私のjQueryです。
$(function() {
$(".research tr:not(.accordion)").hide();
$(".research tr:first-child").show();
$(".research tr.accordion").click(function(){
$(this).nextAll("tr").toggle();
});
});
_$(function() {
$(".research tr:not(.accordion)").hide();
$(".research tr:first-child").show();
$(".research tr.accordion").click(function(){
$(this).nextAll("tr").fadeToggle(500);
}).eq(0).trigger('click');
});
_
.fadeToggle(500);
は、単に要素を表示/非表示するのではなく、要素の表示をアニメーション化します。
.eq(0).trigger('click');
は、ページがロードされたときにコンテンツが表示されるように、最初のヘッダーをクリックします。
使用するクールな効果はslideUp()
とslideDown()
ですが、テーブル行では使用できないように見えます。
デモは次のとおりです。 http://jsfiddle.net/Xqk3m/
_.research
_セレクターをキャッシュして、コードを少し最適化することもできます。
_$(function() {
var $research = $('.research');
$research.find("tr").not('.accordion').hide();
$research.find("tr").eq(0).show();
$research.find(".accordion").click(function(){
$(this).siblings().fadeToggle(500);
}).eq(0).trigger('click');
});
_
この例では、関数を選択するためにすべての文字列セレクターも削除しました(たとえば、.not()
の代わりに:not()
を使用しました)。 DOMトラバーサルの関数は、セレクターを文字列に入れるよりも高速です。
デモは次のとおりです。 http://jsfiddle.net/Xqk3m/1/
最後に大事なことを言い忘れましたが、あるセクションを開いたときに残りのセクションを閉じるアコーディオンにしたい場合、次の解決策があります。
_$(function() {
var $research = $('.research');
$research.find("tr").not('.accordion').hide();
$research.find("tr").eq(0).show();
$research.find(".accordion").click(function(){
$research.find('.accordion').not(this).siblings().fadeOut(500);
$(this).siblings().fadeToggle(500);
}).eq(0).trigger('click');
});
_
$research.find('.accordion').not(this).siblings().fadeOut(500);
は重要な部分です。クリックされたものを除くすべての_.accordion
_要素を選択し、選択されたすべての_.accordion
_要素の兄弟を見つけて非表示にします。
デモは次のとおりです。 http://jsfiddle.net/Xqk3m/2/
フェード効果を追加しました。それを確認してください- http://jsfiddle.net/XE6AG/1/
$(function() {
$(".research tr:not(.accordion)").hide();
$(".research tr:first-child").show();
$(".research tr.accordion").click(function(){
$(this).nextAll("tr").fadeToggle();
});
});
これは高速です- http://jsfiddle.net/XE6AG/2/
//this is fast
$(function() {
$(".research tr:not(.accordion)").hide();
$(".research tr:first-child").show();
$(".research tr.accordion").click(function(){
$(this).nextAll("tr").fadeToggle("fast");
});
});
これは本当に遅いです。 http://jsfiddle.net/XE6AG/3/
//this is fast
$(function() {
$(".research tr:not(.accordion)").hide();
$(".research tr:first-child").show();
$(".research tr.accordion").click(function(){
$(this).nextAll("tr").fadeToggle("fast");
});
});
たとえば、イージングを追加することもできます- http://jsfiddle.net/XE6AG/4/ 。