• 締切済み

JavaScriptによる表のソート機能付与

avaScriptでソートに関する質問です。jQueryを使って簡潔な記述で実現したいのですが、tablesoterなどのプラグインは使用不可の条件で、Tableのデータを並び替える方法がなかなか見いだせません。例えば、以下のようなTableにソート機能を持たせるにはどのようなJavaScriptの記述が考えられるでしょうか? <thead>の<img>の一方をクリックしたら昇順、もう一方をクリックしたら降順にしたいです。押された場所の項目に応じてそのように並び替えをしたいです。なお、ソートは<tbody>の部分のみでOKです。 <table> <thead> <tr> <th>年月<img src="01.gif"> <img src="02.gif"></th> <th>更新数<img src="01.gif"> <img src="02.gif"></th> <th>聴取率<img src="01.gif"> <img src="02.gif"></th> <th>平均金額<img src="01.gif"> <img src="02.gif"></th> <th>滞在時間<img src="01.gif"> <img src="02.gif"></th> </tr> </thead> <tbody> <tr> <td>2010年08月</td> <td>0</td> <td>22%</td> <td>30円</td> <td>0</td> </tr> <tr> <td>2010年07月</td> <td>2</td> <td>100.00%</td> <td>180円</td> <td>27日 +05:17</td> </tr> <tr> <td>2010年09月</td> <td>2</td> <td>100.00%</td> <td>190円</td> <td>27日 +05:17</td> </tr> </tbody> <tfoot> <tr> <td>合計</td> <td >2</td> <td>21.25%</td> <td>400円</td> <td>57日 +12:10</td> </tr> </tfoot> </table> 以上です。HTMLをいじるのはありです。 どうかよろしくお願い致します。

noname#158345
noname#158345

みんなの回答

  • fujillin
  • ベストアンサー率61% (1594/2576)
回答No.1

>機能を持たせるにはどのようなJavaScriptの記述が考えられるでしょうか? 記述の一例として… * そのまま文字列のソートにしているので、数値で比較する場合は数値に変換する必要あり。 * tableを特定する必要がある場合は、セレクタ部分を変えてください。 * HTMLはご提示のままです。 * ごく簡単な原型みたいなものなので、必要に応じて修正してください。 (全角空白は半角に) $(function(){  $("thead th img").click(function(){ //準備処理   var i, temp = [];   var th = $(this).parent();   var tb = $("tbody");   var order = $("img", th).index($(this));   var column = th.parent().children().index(th);   column = ":eq(" + column + ")"; //対象列をコピー   $("tr", tb).each(function(i){    temp[i] = [$(this).children("td" + column).text(), $(this)];   }); //コピーを並べ替え   temp.sort();   if(order) temp.reverse(); //結果を反映   for(i=0; i<temp.length; i++) temp[i][1].appendTo(tb);  }); });

関連するQ&A

  • tableソート

    新着順になっているテーブルをjqueryで名前ごとにまとめることはできますか? スレ   名前   日時 ああ    ここ   2014/1/31 いい    たた   2014/1/20 ああ    ここ   2014/1/10 ああ    ここ   2014/1/01 こんな感じにしたいです ああ    ここ   2014/1/31 └     ここ   2014/1/10 └     ここ   2014/1/01 いい    たた   2014/1/20 html <table width="100%"> <tr> <th>スレ</th> <th>なまえ</th> <th>新着日時</th> </tr> <tbody> <tr><td>ああ</td><td>test1</td><td>2014/01/31</td></tr> <tr><td>いい</td><td>test2</td><td>2014/01/20</td></tr> <tr><td>ああ</td><td>test3</td><td>2014/01/10</td></tr> <tr><td>ああ</td><td>test4</td><td>2014/01/01</td></tr> </tbody> </table> クリックでのソートはいりません。表示したときにソートするのみで結構です よろしくお願いします

  • 検索機能とページ送りのできるテーブルの作成について

    お世話になります <input type="text" name="search" id="search"> <table width="800" border="0" id="item" name="item">  <thead>   <tr>    <th></th>   </tr>  </thead>  <tbody>   <tr>    <td>     <a href="hoge.html">      <img src="hoge.jpg">     </a>     <b>ほげ</b>    </td>   </tr>   <tr>    <td>     <a href="hogehoge.html">      <img src="hogehoge.jpg">     </a>     <b>ほげほげ</b>    </td>   </tr>  </tbody> </table> ※本来はTR要素がもっと沢山増えます。 このテーブルに対して表示件数が5件を超えたらページ送りができるようにし、テキストボックスの内容で検索をかけて表示をしたいのですが、何か良い解決案はありませんか? 一応自分でもいろいろ調べて http://d.hatena.ne.jp/Rewish/20090703/1246615343 http://ponk.jp/?p=2413 を共存させるようとしてみたのですがどうもうまく動作しませんでした。

  • WEB上の表でソートするためのJavaScript

    WEB上の表でソートするためのJavaScript 下記のHTMLのソースではTableを用いた表を作成していますが、 番号、名前、クラス、クラブの項目をWEB上でソートできる JavaScriptを教えて欲しいのです。 下記ソースの表では、番号順に並べていますが、名前順や、クラス順、 クラブ順に並べ変えたいのです。 ただ、これが表示は1列ではなくの3列に分けて表示したいのです。 3列でそれぞれソートするのではなく、3つの列を1つの連続した列 としてソートしたいのです。 ですから、ソートを実行するためのボタンは、各列には必要なく、左端の列の 各項目をボタンにできればと思っています。 どうぞよろしくお願い致します。 <table border="3"> <TR> <TD> <TABLE border="1" > <TR> <Th>番号</Th><Th>名前</Th><Th>クラス</Th><Th>クラブ</Th> </TR> <TR> <TD>1</TD><TD>ヤマダ</TD><TD>A</TD><TD>水泳</TD> </TR> <TR> <TD>2</TD><TD>タナカ</TD><TD>C</TD><TD>野球</TD> </TR> <TR> <TD>3</TD><TD>サトウ</TD><TD>E</TD><TD>水泳</TD> </TR> <TR> <TD>4</TD><TD>スズキ</TD><TD>D</TD><TD>茶道</TD> </TR> </TABLE> </TD> <TD> <TABLE border="1" > <TR> <Th>番号</Th><Th>名前</Th><Th>クラス</Th><Th>クラブ</Th> </TR> <TR> <TD>5</TD><TD>ワタナベ</TD><TD>B</TD><TD>バレー</TD> </TR> <TR> <TD>6</TD><TD>イトウ</TD><TD>C</TD><TD>水泳</TD> </TR> <TR> <TD>7</TD><TD>キムラ</TD><TD>A</TD><TD>柔道</TD> </TR> <TR> <TD>8</TD><TD>イシダ</TD><TD>B</TD><TD>卓球</TD> </TR> </TABLE> </TD> <TD> <TABLE border="1" > <TR> <Th>番号</Th><Th>名前</Th><Th>クラス</Th><Th>クラブ</Th> </TR> <TR> <TD>9</TD><TD>ワダ</TD><TD>C</TD><TD>卓球</TD> </TR> <TR> <TD>10</TD><TD>タダ</TD><TD>D</TD><TD>柔道</TD> </TR> <TR> <TD>11</TD><TD>ミキ</TD><TD>E</TD><TD>野球</TD> </TR> <TR> <TD>12</TD><TD>ハナダ</TD><TD>A</TD><TD>水泳</TD> </TR> </TABLE> </TD> </TR> </table>

  • 罫表のセル結合

    AJAXの勉強をしています。 Htmlに表示されている罫表の選んだセルをセル結合するような処理を 作りたいのですが、可能でしょうか。 DOMを使用してセルの削除等は出来たのですが、セル結合を行う事が出来ないのです。 function joinSpan( ) { // 出力先のトップ要素となるtable要素 var table = document.getElementById("result"); //とりあえずセル削除してみる。 var child = table.childNodes; var child2 = child[0].childNodes;  child[0].removeChild(child2[1]); } ↓対象となるテーブル <table id="result"> <thead><tr><th>1</th><th>2</th><th>3</th><th>4</th></tr></thead> <tbody > <tr><td>あ</td><td>う</td><td>え</td><td>お</td></tr> <tr><td>お</td><td>か</td><td>き</td><td>く</td></tr> <tr><td>け</td><td>こ</td><td>さ</td><td>し</td></tr> <tr><td>す</td><td>せ</td><td>そ</td><td>な</td></tr> </tbody> </table> 何か良い方法がありましたら、教えて頂ければと思います。

  • テーブルデータのスクロール

    いつもお世話になっています。 テーブル作成時に、ヘッダ部分のみを固定し、 データ部分をスクロールしたいと思い、調べた結果 <thead>、<tbody>、<tfoot> タグ系を使うまでは分かりました。 が、<tbody>部分は、スクロールせずにただ普通に表示されているだけでした。 OKwebで検索し、サンプルを作成してくださった方がいたので 試しにソースをコピーして、ローカルで試してみましたがダメでした。 ↓ちなみにソースです。width や height の値をいろいろ変えたりはしました。↓ <html> <head> <title>TbodyScroll</title> </head> <body> <table border="1" width="200px" height="100px"> <thead> <tr><th>M1</th><th>M2</th><th>M3</th></tr> </thead> <tfoot> </tfoot> <tbody style="width:180px;height:60px;overflow:scroll"> <tr><td>D1-1</td><td>D1-2</td><td>D1-3</td></tr> <tr><td>D2-1</td><td>D2-2</td><td>D2-3</td></tr> <tr><td>D3-1</td><td>D3-2</td><td>D3-3</td></tr> <tr><td>D4-1</td><td>D4-2</td><td>D4-3</td></tr> <tr><td>D5-1</td><td>D5-2</td><td>D5-3</td></tr> <tr><td>D6-1</td><td>D6-2</td><td>D6-3</td></tr> <tr><td>D7-1</td><td>D7-2</td><td>D7-3</td></tr> </tbody> </table> </body> </html> 自分なりに位置を固定して試したり、他のサイトも検索してみましたが、<tbody>部分を実際にスクロール するサンプルソースがみつからず、ここに質問させていただきました。 ご教授お願いいたします。

    • ベストアンサー
    • HTML
  • tableのヘッダを固定したい

    IE6,7,8でテーブルのヘッダを固定したいのですが うまくいきません。 条件は以下のとおりです。  ・width: ?%として大きさを可変にする。  ・ヘッダを固定する。  ・ボディにはスクロールバーをつける これまでwidthは固定で作成してきたのですが 可変にする場合どのようなcssにすればよいのでしょうか。 よろしくお願いします。 <div id="container"> <div class="headerTable"> <table border="1" cellspacing="0" cellpadding="0"> <thead> <tr> <th>あ</th> <th>い</th> <th>う</th> <th>え</th> </tr> </thead> </table> </div> <div class="bodyTable"> <table border="1" cellspacing="0" cellpadding="0" width="100%"> <thead> </thead> <tbody> <tr> <td>あaaaaaa</td> <td>い</td> <td>う</td> <td>え</td> </tr> </tbody> </table> </div> </div>

  • スタイルシートについて

    <HTML> <HEAD> <TITLE></TITLE> </HEAD> <BODY> <TABLE border="1"> <TBODY> <TR> <TD><IMG src="i1.gif" width="64" height="64" border="0"></TD> <TD><IMG src="i2.gif" width="64" height="64" border="0"></TD> </TR> <TR> <TD><IMG src="m1.gif" width="32" height="32" border="0"></TD> <TD><IMG src="m2.gif" width="32" height="32" border="0"></TD> </TR> </TBODY> </TABLE> </BODY> </HTML> こういったTableを使った表がある場合、スタイルシートで示すことは出来ますか?もし出来るならそのソースを教えてください。 また、こういったTableのホームページを一括でスタイルシートに変換できるソフトが存在していたら教えてください。 それと、この行数がかなり大きくなると、Tableよりも軽く表示がされると聞いたのですが本当でしょうか? ご返答、何卒、よろしくお願い致します。

    • ベストアンサー
    • HTML
  • クリックされた罫表セルの行番号、列番号を取得するには

    クリックされた罫表セルの行番号、列番号を取得する事は出来るのでしょうか。 例えば 下記Tableの"き"という文字が入ったセルをクリックすると 列番号:2 行番号:3 という番号を取得したいのです。 <table> <thead><tr><th>1</th><th>2</th><th>3</th><th>4</th></tr></thead> <tbody> <tr td>あ</td><td>い</td><td>う</td><td>え</td></tr> <tr><td>お</td><td>か</td><td>き</td><td>く</td></tr> <tr><td>け</td><td>こ</td><td>さ</td><td>し</td></tr> <tr><td>す</td><td>せ</td><td>そ</td><td>な</td></tr> </tbody> </table> onclickでidのついた所をクリックした時のアクションは取得できましたが、Csvなどからデータを取得したtableのセルをクリックした時の 列数、行数を取得する事は可能でしょうか。 宜しくお願いします。

  • 罫表内の文字を選択された場合に変更するには

    罫表内の一部の文字を選択し、"色変更"ボタンを押した場合に 選択した文字の色を変更する事は出来ますでしょうか。 例えば 下記Tableの右下のセルの"にぬね"という文字を選択し、 ボタンを押すと選択した文字の色が赤に変わるというような事がしたいのです。 <table> <thead><tr><th>1</th><th>2< /th><th>3</th><th>4</th></tr>< /thead> <tbody> <tr td>あいうえお</td><td>かきくけこ</td></tr> <tr><td>さしすせそ</td><td>なにぬねの</td></tr> </tbody> </table> 何か方法ありますでしょうか。 宜しくお願いします。

  • マウスカーソルを乗せた時にテーブルの行の色を変える

    マウスカーソルがテーブルの行の上に来た時に行の色を変えたくて 以下のようにCSSとHTMLを書いてみました。 しかし、何の変化もありませんでした。どこが悪いのかわかりますでしょうか。 【CSS】 table tr:hover { background:red; } 【HTML】 <html> <head> <script type="text/javascript" src="./jquery-1.9.1.js"></script> <link rel="stylesheet" href="test.css" type="text/css"> <script> </script> </head> <body> <table border="1"> <thead> <tr> <th>名前</th> <th>金額</th> </tr> </thead> <tbody> <tr> <td>abc</td> <td>3000</td> </tr> <tr> <td>xyz</td> <td>100</td> </tr> <tr> <td>myk</td> <td>20000</td> </tr> </tbody> </table> </body> </html>

    • ベストアンサー
    • CSS

専門家に質問してみよう