2017/08/13

table要素を絞り込んでみた。

今回は

JavascriptでTable要素を絞り込んでみます。
キビキビ動いていい感じです。

それではやっていきましょう。

目次

目標

Table要素をJavascriptで絞り込む。

サンプルコード

sample.html

<!DOCTYPE html>
<html>
  <head>
    <meta content="IE=edge"
          http-equiv="X-UA-Compatible" />
    <link href="./sample.css"
          rel="stylesheet"
          type="text/css" />
    <title>Selecters</title>
    <script type="text/javascript">
     
      //第一引数フィルタリング対象テーブル
      //第二引数フィルタリングキーワード     
      function exefilter(targettableid,filterkeywordid){
        //フィルター処理対象テーブル取得
        var target = document.getElementById(targettableid);
        //フィルター処理キーワード取得
        var keyword =
              document.getElementById(filterkeywordid).value;
        //テーブル全体で検索に合致したか判定するフラグ
        var Flag_search_Result_Table=false;
        //検索対象1行で検索に合致したか判定するフラグ
        var Flag_search_Result=false;

       
        for(i=0;i<target.rows.length;i++){
          //フラグリセット
          Flag_search_Result=false;
          for(j=0;j<target.rows[i].cells.length;j++){
            var s =
             target.rows[i].cells[j].innerText.indexOf(keyword);
            if(s > -1){
              Flag_search_Result=true;
            }
          }
          //検索結果がtrueの列は表示する。
          if( Flag_search_Result){
            target.rows[i].style.display='table-row';  
            //テーブル内で一件でも表示できたならtrue
            Flag_search_Result_Table=true;
          }
          else{
            target.rows[i].style.display='none';
          }
        }
        //一件も検索に合致しない場合には全件表示する。
        if(Flag_search_Result_Table==false){
          for(i=0;i<target.rows.length;i++){
            target.rows[i].style.display='table-row';           
          }
        }
      }
    </script>
  </head>
  <body>
    <div class="container">
      <main>
        <div id="textarea">
          <input onkeyup="exefilter('fil_table','filv');"
                 type="text" id="filv"/>
          <table id="fil_table">
            <tr>
              <td>1</td>
              <td>リンゴ</td>
              <td>くだもの</td>
            </tr>
            <tr>
              <td>2</td>
              <td>オレンジ</td>
              <td>くだもの</td>
            </tr>
            <tr>
              <td>3</td>
              <td>バナナ</td>
              <td>くだもの</td>
            </tr>
            <tr>
              <td>4</td>
              <td>アプリコット</td>
              <td>くだもの</td>
            </tr>
            <tr>
              <td>5</td>
              <td>ダイコン</td>
              <td>やさい</td>
            </tr>
            <tr>
              <td>6</td>
              <td>ニンジン</td>
              <td>やさい</td>
            </tr>
          </table>
        </div>
      </main>
    </div>
  </body>
</html>

samplecss.css

省略します。

実行例-表示例

テキストボックスにキーワードを入れると該当する行だけを表示を表示します。
該当する行が無いときはすべての行を表示します。

ポイント!

  1. 文字列変数.indexOf(["検索対象文字列"])で文字列の検索ができる。
  2. tableオブジェクト.rows[列番号].sells[行番号].innerTextで
    テーブルのセルの中のテキストの値にアクセスできる。

終わりに

サクサクと絞込みフィルタリングができました。
動きもいいので気持ちがいいですね。

ご参考になれば幸いです。

ご利用は自己責任で。

0 件のコメント:

コメントを投稿

AWSに手を出してフレームワークも使ってみたが・・・。

サイトを作り直しました。 AWS上に構築した Content created by AXY を作り直しました。 具体的にはbottle.pyを使ったpythonで構築したサイトからPHP7を使用したサイトに再構築しています。 特別何か問題点があったというわけで...