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 を使用して C# のデータ テーブル エンティティ クラス生成ツールを作成する方法

Microsoft は T4 テンプレートを提供していますが、使用するのが非常に難しいと思います。ス...

CSS3 box-shadow プロパティの詳細な例

CSS3 - 影の追加(ボックスシャドウの使用) CSS3 - div またはテキストに影を追加する...

CocosCreator の新しいリソース管理システムの分析

目次1. 資源と建設1.1 クリエイターリソースファイルの基本1.2 リソースの構築2. アセットバ...

よく使用される Linux コマンドの完全なリスト (推奨コレクション)

目次1. システム情報2. シャットダウン(システムのシャットダウン、再起動、ログアウト) 3. フ...

AngularでTweenMaxアニメーションライブラリを使用する際の問題と解決策

最近何もすることがないのでCSSをいじっていますより良いアニメーションライブラリTweenMaxを見...

HTML文書におけるol要素の数値制限に関する議論

一般的に言えば、HTML ドキュメント内で極端に大きな <ol> リストに遭遇する可能性...

Dockerを使用してSonarQubeをインストールする詳細なチュートリアル

目次1. イメージをプルする1.1 関連するイメージをプルして実行する1.1.1 関連する画像を取得...

Linuxルートの初期値を設定する方法の簡単な分析

Ubuntu ではデフォルトで root ログインが許可されていないため、初期の root アカウン...

CSS 経由で JS にパラメータを渡す方法

1. CSSを通す必要がある背景CSS におけるメディアクエリの用途は、デバイスサイズの判別、マウス...

Docker に MySQL と Redis をインストールする方法

この記事はCentOS 7.3システム環境をベースに、MySQLとRedisのインストールと使用につ...

入力テキストボックスの入力実装プロパティを無効にする

今日は、開発でよく使われる、非常に便利な HTML タグをいくつかまとめてみたいと思います。これらの...

MySQL はカスタムシーケンスを使用して row_number 関数を実装します (詳細な手順)

いくつかの記事を読んだ後、ようやく MySQL で row_number() ソートを実装する方法が...

border-radiusは要素に丸い境界線を追加する方法です

border-radius:10px; /* すべての角は半径 10px で丸められます*/ bor...

中国語ウェブコンテンツを紹介する10の経験

<br /> テキスト、シンボル、リンクの 3 つの側面に焦点を当て、主に中国語で、私の...

Nginx のリロード プロセスの背後にある真実を探る

本日の記事では、主にNginxのリロードプロセスについて紹介します。実は前回の記事では、nginx ...