HTML テーブルの空白セル補完を実装する方法

HTML テーブルの空白セル補完を実装する方法

私が初めて Web 開発を独学で学んだ頃は、いわゆる DIV/CSS レイアウトはなく、テーブル レイアウトが主流でした。その時、グリッド内の空白のセルをどのように埋めるかという疑問が生じました。 ——これは私が自社の製品ページを制作する際に直面した頭痛の種です。私はプログラマー出身ではないので、アルゴリズムが少し関わる問題に直面すると途方に暮れてしまいます(笑)。ちなみに、ページングアルゴリズムには苦労したのを覚えています。

いわゆるグリッドとは、3 行 x 4 列 = 合計 12 個のセルを持つ表を指します。製品が 10 個しかない場合は、表の 10 個のセルにのみデータが入力され、残りは空白になります。空白であっても、<td></td> 要素をレンダリングする必要があります。レンダリングしないと、テーブルが歪んで見えます。もちろんハードコードすることも可能ですが、問題はテーブルが ASP によって動的にレンダリングされることです。したがって、空白の TD をどのように計算して表示するかが問題になります。当時はいくつかの方法を思いつきましたが、今思えば、もちろんあまり合理的ではなかったのですが、とにかく、表示できる限りは試してみるしかありませんでした...ハハ。

その後、DIV/CSS の時代になると、Table は非推奨になりました。つまり、アルゴリズムは気にしません。 ——その後のプロジェクトで、テーブルレイアウトがまだ適用可能であることがわかったので、この小さな問題について考えました。 JS を使用した動的制御のコードは次のとおりです。

/**
 * @class レンダリングテーブル
 * 配列と列数を入力して、表マークアップを生成します。
 * @param {配列} リスト
 * @param {数値} 列数
 * @param {関数} getValue
 */
定義(関数(require, exports, module) {
 module.exports = 関数 (リスト、列、getValue) {
  this.list = リスト;
  this.cols = cols || 5;
  
  this.getValue = getValue || this.getValue;
 }
 
 module.exports.prototype = (新しい関数(){
  this.render = 関数(リスト){
   リスト = リスト || this.list;
   
   var len = リストの長さ;
   var cols = this.cols; // 桁数 var rows;
   var 残り = len % cols;
   var html = [];
    行数 = 長さ / 残り;
    
   if(remainder == 0){ // 余りなしで割り算して直接処理できる list.forEach(addTr.bind({
     列: 列、
     html: html、
     getValue: this.getValue
    }));
   }else{ // 残りを処理する var remainderArr = list.splice(list.length - remainder);
    
    リスト.forEach(addTr.bind({
     列: 列、
     html: html、
     getValue: this.getValue
    }));
   
    // 空白を埋めます var emptyArr = new Array(cols - remainnerArr.length);
    空のArr = 空のArr.join('空');
    空のArr = 空のArr.split('空');
    // 残り + 空きスペース remainnerArr = remainnerArr.concat(emptyArr);
    
    if(remainnerArr.length != cols){
     throw '最後の行の長さが間違っています!長さは ' + cols; である必要があります。
    }
    残りのArr.forEach(addTr.bind({
     列: 列、
     html: html、
     getValue: this.getValue
    }));
   }
   
   
   addTable(htmls.join('')) を返します。
  }
  
  /**
   * 表示された値を取得するためのデフォルトの関数。この関数は通常オーバーライドする必要があります。
   * @param {混合}
   * @return {文字列}
   */
  this.getValue = 関数(データ){
   データを返します。
  }
   
  /**
   * 各値に <td></td> を追加します。行がいっぱいの場合は、</tr></tr>を追加します。
   * @param {Mixed} アイテム
   * @param {数値} i
   * @param {配列} arr
   */
  関数 addTr(item, i, arr){
   var html = '<td>' + this.getValue(item) + '</td>';
   
   もし(i == 0){
    html = '<tr>' + html;
   }そうでない場合、(i + 1) % this.cols == 0 && i != 0){
    html += '</tr><tr>';
   }そうでない場合(i == arr.length){
    html += '</tr>';
   }
   
   this.htmls.push(html);
  }
  
  /**
   * 
   * @param {文字列} html
   */
  関数 addTable(html){
   '<table>' + html + '</table>' を返します。
 // var table = document.createElement('table');
 // テーブルの内部HTML = html;
 // テーブル境界="1";
 // document.body.appendChild(テーブル);
  }
 });
});

これはすぐに思いつく問題だと思うかもしれませんが... 当時、私は転職活動中でした... ちょっとした「技術的な内容」の問題は、私にとってはつまずきの石になってしまいました...

2019-5-18 JSTLメソッド:

<%
 //空白セルを補完します String tds = ""; int maxTds = 9; 
 リスト<?> list = (リスト<?>)request.getAttribute("list");
 for(int i = 0; i < (maxTds - list.size()); i++ ) {
  tds + = "<td></td>";
 }
 
 リクエストの属性を設定します("tds", tds);
%>
  <テーブル>
   <tr>
    <c:foreach items="${list}" var="item">
     <td>
      <h3>${item.name}----${totalCount}</h3>
      <p></p>
      <div></div>
     </td>
     <c:if test="${((currentIndex + 1) % 3) == 0}">
   </tr>
   <tr>
    </c:if>
    <c:if test="${((currentIndex + 1) == totalCount) && (totalCount != 9)}">
     ${tds}
    </c:if>
    </c:foreach>
   </tr>
  </テーブル>

HTML テーブルの空白セルを完成させる方法についての記事はこれで終わりです。HTML テーブルの空白セルを完成させる方法の詳細については、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

<<:  div間のギャップの解決策

>>:  CSS3で実装されたスライドメニュー

推薦する

MySQL 5.7 共通データ型

——「MySQL in Simple Terms (第 2 版)」からのメモ数値型整数型バイト最小最...

MySQLを定期的にバックアップしてQiniuにアップロードする方法

ほとんどのアプリケーション シナリオでは、緊急時に備えて重要なデータをバックアップし、安全な場所に保...

Ubuntu 上の Apache で SSL (https 証明書) を設定する正しい方法の詳細な説明

まず、Alibaba Cloud の公式チュートリアルをご覧ください。ファイルの説明: 1. 証明書...

JavaScript スクリプトが実行されるタイミングの詳細な説明

JavaScript スクリプトは HTML 内のどこにでも埋め込むことができますが、いつ呼び出され...

Deepin で virtualenv をインストールして使用するチュートリアル

virtualenv は、分離された Python 仮想環境を作成するためのツールです。独立したディ...

Centos6でgitlabを構築する方法

序文元のプロジェクトは、パブリックネットワークgitlabに配置されていました。セキュリティ上の理由...

Web ページ制作におけるテーブル属性 CellPad、CellSpace、Border の説明と使用

cellspacing は表内のセル間の距離です。セルパディングは、表のセル内の空白スペースです。一...

Web フォームの入力要素の高度な使用例 11 選

1. ボタンが押されたときに点線のボックスをキャンセルする<br />入力に属性値hid...

CSS3 フリップカード番号サンプルコード

今日会社から課題をもらったのですが、効果図は以下のとおりです。 どのような効果を実現したいかは特に決...

mysql5.7.19 winx64 解凍版のインストールと設定のチュートリアル

mysql 5.7.19 winx64解凍版のインストールチュートリアルを収録しました。具体的な内容...

DockerプライベートライブラリHarborのアーキテクチャとコンポーネントの説明

この記事では、Harbor アーキテクチャの構成と、実行時に各コンポーネントを使用する方法について説...

Vueシャトルボックスは上下の動きを実現します

この記事の例では、vueシャトルボックスを上下に動かすための具体的なコードを参考までに共有しています...

データベースの水平セグメンテーションを実装するための2つのアイデア

導入インターネット アプリケーションの普及に伴い、膨大なデータの保存とアクセスがシステム設計における...

Centos7 での MySQL のインストールに関するチュートリアル

最近、自宅サーバーにクラウドディスクを導入する予定なので、一連の環境構築作業を始めました。MySQL...

Vue3の組み込みコンポーネントであるTeleportの使い方を詳しく説明します

目次1. テレポートの使用2. モーダルダイアログコンポーネントを完成させる3. コンポーネントのレ...