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で実装されたスライドメニュー

推薦する

Node.js mysqlクライアントが認証プロトコルをサポートしていない問題を解決する

序文mysql モジュール (プロジェクト アドレスは https://github.com/mys...

Vue が配列の変更を監視できない問題の解決方法

目次1. Vueリスナー配列2. vueが配列の変更を監視できない状況1. Vueリスナー配列Vue...

Linuxカーネルとデバイスツリーのコンパイルと書き込みを分析する

目次1. 材料を準備する2. Linuxカーネルファイルをダウンロードする3. コンパイル4. TF...

JavaScriptエンジンV8の実行プロセスの詳細な説明

目次1. V8ソース2. V8サービスターゲット3. V8の初期アーキテクチャIV. V8の初期アー...

React setStateデータ更新メカニズムの詳細な説明

目次setStateを使用する理由setStateの使用法非同期または同期更新要約するsetStat...

Excel をインポートするときに js で時間を変換する正しい方法について

目次1. 基本2. 問題の説明3. 解決策付録: js を使用して Excel の日付形式を変換する...

CentOS 7 で PHP 5.4 を 5.6 にアップグレードする方法の簡単な分析

1.ターミナルに入ったらPHPのバージョンを確認するphp -v出力は次のようになります。 PHP ...

MySQL でテーブルを作成するときの NULL と NOT NULL の使用方法の詳細な説明

MySQL の仕様によっては、テーブル作成仕様にすべてのフィールドが空であってはならないという要件を...

mysql エラー 1045 (28000) - ユーザーへのアクセスが拒否される問題を解決する方法

問題の説明 (以下の説明は Windows 環境に限定されます): D:\develop\ide\m...

nginxで複数のサーバーを簡単に構成する方法

1: nginx のインストール方法については詳しく説明しません。Baidu で検索してください。 ...

複数のdiv内のテーブルのtdwidth設定は同じで、揃えることができません

最近、複数のdivにあるテーブルのTDを同じ幅に調整しても、揃えることができず、幅にパターンがないこ...

JavaScript における this ポイントの問題の詳細な説明

要約する地球環境 ➡️ ウィンドウ通常関数 ➡️ ウィンドウまたは未定義コンストラクター ➡️ 構築...

Vue-Routerのインストールと使用方法の詳細な説明

目次インストールルーティングの基本構成Vue にルーターをインストールするルーターの設定Router...

Vue プロジェクトに ECharts を導入する

目次1. インストール2. はじめに3. 使用4. 必要に応じてEChartsチャートとコンポーネン...