LoginSignup
2
2

More than 3 years have passed since last update.

合計行を含んだHTMLテーブルをソートする

Last updated at Posted at 2020-09-30

はじめに

・以前、JavaScriptで、DBにためている自分のQiitaのデータ(QiitaAPIにて取得)を「2軸グラフ」と「テーブル」に表示してみる、というを実施しました。(Qiita:Chart.jsを使用して複数軸のグラフを表示する(Javascript)

・記事やデータもたまってきましたので、そこで作成していたテーブルをソートできるような機能をつけたいと思いました。

作成サイト

作成サイトはこちら

01.png

「Views」でソートした画面

02.png

ポイント

①Sorttableの使い方

基本は、以下のサイトを参考にさせていただきました。感謝。

Qiita:HTMLのtableをソートする方法

②テーブルデータの中に、HTMLタグも書ける

・テーブルデータにLINK設定などをしたいときは、どうするのか?と思っていたのですが、htmlのタグを書けばできることがわかりました。

sample.js
  //データ設定箇所
  var outdata = [];
  for(var i = 0; i < qiitadata.length; i++){

  // 本日日付になったら、格納処理
  if(qiitadata[i].setdate == hyphendate){

    var data = {
      no: (maxno + 1 - Number(qiitadata[i].no)),
      // タグも書ける
      title: '<a href="' + qiitadata[i].url + '" target="_blank">' + qiitadata[i].title + '</a>',
      views: Number(qiitadata[i].views),
      likes: Number(qiitadata[i].likes),
      stocks: Number(qiitadata[i].stocks),
      plike: Number(qiitadata[i].per_like),
      pstock: Number(qiitadata[i].per_stock),
    };

    outdata.push(data);

    // 合計の計算(カウントアップ)
    sum_view += Number(qiitadata[i].views);
    sum_like += Number(qiitadata[i].likes);
    sum_stock += Number(qiitadata[i].stocks);
  };
};

③合計行を含んだHTMLテーブルをソートするには

・テーブルに合計行がある場合は、合計行も一緒にソートされては具合が悪いです。どうすればいいのかよくわかりませんでしたが、いろいろ調べて試した結果、<tfoot></tfoot>の中にデータを出せば、合計行はソートされないことがわかりました。

sample.html
      <div class="container">
        <!-- テーブルヘッダ部分 -->
        <div id="result1"></div>
        <!-- テーブル部分 -->
        <div class="table sortable-table">
          <table id="outTable">
            <thead class="thead-light">
              <tr>
                <th scope="col" data-id="no">No</th>
                <th scope="col" data-id="title">タイトル</th>
                <th scope="col" data-id="views" sortable>VIEWS</th>
                <th scope="col" data-id="likes" sortable>LIKES</th>
                <th scope="col" data-id="stocks" sortable>STOCKS</th>
                <th scope="col" data-id="plike" sortable>LIKE率</th>
                <th scope="col" data-id="pstock" sortable>STOCK率</th>
              </tr>
            </thead>
            <!-- 合計行部分 -->
            <tfoot id="result2"></tfoot>
          </table>
        </div>
      </div>

まとめ

  • HTMLのテーブルでソートを簡単に実施することができました。
  • 合計行もソートに含めないやり方にモヤモヤしていたのですが簡単にできることがわかったのが、一番の発見でした。
2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2