javascriptでテーブルソートについて質問です。
こちらは動きだけで構いませんのでどなたかご教授お願いします。
1.<th class="***">を1回目タップすると、昇順へ(上向きの▲アイコンの色が変化)
2.もう一度タップすると、降順へ(下向きの▼アイコンの色が変化)
3.それ以降は 昇降交互に入れ替わる。
と言う動きをしたいと思っています。
ちなみに画像は3枚ありまして、タップする前は上下色なしの▲▼画像があり、2枚目は上▲が色あり、3枚目は下▼が色あります。
どなたか分かる方、宜しくお願いいたします。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答3件
0
ベストアンサー
jQueryを使うことを許していただけるなら、
lang
1$('th').on('click',function(){ 2 var target = $(this); 3 var q = 'td:eq(' + target.index() + ')'; 4 5 if ( target.hasClass('desc') ){ 6 var compare = function(a,b){return $(q, a).text() < $(q, b).text()} 7 } else { 8 var compare = function(a,b){return $(q, a).text() > $(q, b).text()} 9 } 10 11 $('table').append( Array.prototype.sort.call($('tr').not(':first-child'), compare) ); 12 13 target.toggleClass('desc'); 14});
細かいことを抜きで書くとこんな感じです。
投稿2014/12/04 07:33
総合スコア36140
0
listjs という javascript のコンポーネントがあります。
テーブルのソート例が http://www.listjs.com/examples/table にあります。
"sort by name" のボタンをクリックするとソートの昇順・降順が切り替わります。
web 画面上で テーブルを表示し、ソートを含む各種操作を行うという需要は多いので、たくさんのツールが開発されています。
"jquery table sort" などで検索するだけでも、たくさんの情報が見つかります。
投稿2014/12/03 14:57
総合スコア22324
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
Javascriptでテーブルを作る場合、テーブル自体もJavascriptで作った方が制御が楽です。
テーブル部分はdivで作っていますが、サンプルとして以下を作ってみました。
動作サンプル:
http://embed.plnkr.co/8adH9uQPo74ayJUAAOWT/preview
ソース:
lang
1<!DOCTYPE html> 2<html> 3 <head> 4 <link data-require="fontawesome@4.1.0" data-semver="4.1.0" rel="stylesheet" href="http://netdna.bootstrapcdn.com/font-awesome/4.1.0/css/font-awesome.min.css" /> 5 <script data-require="jquery@2.1.1" data-semver="2.1.1" src="http://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 6 <link rel="stylesheet" href="style.css" /> 7 <script src="script.js"></script> 8 </head> 9 10 <body> 11 <div id="sortBtn"><i class="fa fa-sort-desc"></i></div> 12 <div id="table1"></div> 13 </body> 14</html>
lang
1function getDescTable(dataArray){ 2 var result = ''; 3 dataArray.forEach(function(data){ 4 result += '<div>'+data+'</div>'; 5 }); 6 return result; 7} 8function getAscTable(dataArray){ 9 var result = ''; 10 dataArray.forEach(function(data){ 11 result = '<div>'+data+'</div>' + result; 12 }); 13 return result; 14} 15 16var dataArray = ['aaaa','bbbb','cccc']; 17var sortType = 0; 18$(document).ready(function(){ 19 $('#table1').html(getDescTable(dataArray)); 20 $('#sortBtn').click(function(){ 21 var icon = $(this).find('i'); 22 if(icon.hasClass('fa-sort-desc')){ 23 icon.removeClass('fa-sort-desc'); 24 icon.addClass('fa-sort-asc'); 25 $('#table1').html(getAscTable(dataArray)); 26 } else { 27 icon.removeClass('fa-sort-asc'); 28 icon.addClass('fa-sort-desc'); 29 $('#table1').html(getDescTable(dataArray)); 30 } 31 }); 32});
ソートの▼部分をクリックすると、ソート順序が変わります。
また、▼の部分は画像を用意するのが面倒だったので、fontawsomeを利用しています。
もしご存知なければこちらもお勧めです。
アイコン系が非常に簡単に実装できますし、画像読み込みよりも高速です。
以上、ご参考まで。
投稿2014/12/03 08:58
総合スコア384
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2014/12/04 07:52