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

推薦する

Element UI をインストールして vue3.0 でベクター グラフィックスを使用する方法

ここでは、v3 のインストールと使用にのみ焦点を当てます。v2 について学びたい場合は、公式 Web...

MySQL innodb_autoinc_lock_mode について

innodb_autoinc_lock_mode パラメータは、auto_increment 列を持...

js におけるイベントバブリングとイベントキャプチャの簡単な分析

目次01-イベントバブリング1.1- イベントバブリングの概要1.2-イベントバブリングの利用(イベ...

MySQL 5.7.18 インストールチュートリアルと問題の概要

MySQL 5.7.18 のインストールと問題の概要。今日、新しい MySQL サーバーを導入しまし...

aタグのname属性とid属性を使用してページ内を移動する方法

以前はaタグのname属性を使ってジャンプする方法しか知らなかったのですが、idも使えることを今日知...

Linux で ping は成功するがポートが利用できない問題を解決する方法

ping は成功したがポートにアクセスできない場合のポート可用性検出の説明ポート可用性検出ツールの紹...

Linuxカーネルで中国語の文字を出力する方法

次のように、Windows/MacOS からログインした Linux の SSH ターミナルで簡単に...

ウェブサイトのアクセス速度を向上させるための徹底的な最適化に関するヒント

<br />ウェブサイトのアクセス速度はウェブサイトのトラフィックに直接影響を及ぼし、ウ...

Webpack ファイル パッケージ化エラー例外

webpack をパッケージ化する前に、次の作業が完了していることを確認する必要があります。 1) ...

HTML pre タグ内の自動改行

このとき、overflow:auto;(コードがコンテナの境界を超えたときにスクロールボックスを表示...

2つのシンプルなメニューナビゲーションバーの例

メニューバーの例 1: コードをコピーコードは次のとおりです。 <!DOCTYPE html ...

JSメモリ空間の詳細な説明

目次概要1. スタックとヒープ2. 変数オブジェクトと基本データ型3. 参照データ型とヒープメモリメ...

W3C チュートリアル (12): W3C SOAP アクティビティ

Web サービスは、アプリケーション間の通信に関係しています。SOAP は、Web サービス間の X...

Vue3 AST パーサー - ソースコード分析

目次1. AST抽象構文木を生成する2. ASTのルートノードを作成する3. 子ノードの解析4. テ...

3つの簡単な調整でMySQLを最適化する

私は熟練した DBA になるつもりはありませんが、MySQL を最適化するときは、いくつかの構成を調...