HTMLテーブルの空白セル補完方法
私がWeb制作を独学で始めた頃は、DIV/CSSレイアウトなんてものはなく、テーブルレイアウトが主流でした。その時、パレットの空白セルをどう補完するかという問題が出てきました。--これは、会社の商品ページを制作しているときに頭を悩ませたことでした。プログラムを学んでいなかったので、この問題のアルゴリズムに少し遭遇しただけで、どうしようもなくなってしまったんですね。ちなみに、ページングのアルゴリズムには、ちょっと翻弄された記憶があります。
パリセイドとは、3行×4列=計12セルの表のことです。商品が10個しかない場合、テーブルの10セルしか埋めることができず、残りは空白になります。空白であっても、<td></td>要素はレンダリングしなければ、テーブルの形が崩れてしまいます。deadを書くのはいいのですが、表はASPで動的にレンダリングされます。なので、空白のtdをどう計算し、どう表示するかが問題なのです。私はいくつかの方法を考えていた、振り返ると非常に確かに非常に合理的ではない、要するに、死んだ馬である......ライン上に表示することができます......ハァッ。
DIV/CSS時代にTableは放棄された。だからアルゴリズムも気にしなくなった。--でも、あるプロジェクトで、テーブルレイアウトがまだ使えることがわかったので、この小さな問題を考えてみたんです。JSで動的に制御したコードは、こんな感じ。
/**
* @class renderTable
* Input an array and columns to generate a markup for a table.
* @param {Array} list
* @param {Number} cols
* @param {Function} getValue
*/
define(function(require, exports, module) {
module.exports = function (list, cols, getValue){
this.list = list;
this.cols = cols || 5;
this.getValue = getValue || this.getValue;
}
module.exports.prototype = (new function(){
this.render = function(list){
list = list || this.list;
var len = list.length ;
var cols = this.cols;// number of bits
var rows;
var remainder = len % cols;
var htmls = [];
rows = len / remainder;
if(remainder == 0){ // divisible without remainder
list.forEach(addTr.bind({
cols : cols,
htmls: htmls,
getValue : this.getValue
}));
}else{ // handle the remainder part
var remainnerArr = list.splice(list.length - remainder);
list.forEach(addTr.bind({
cols : cols,
htmls: htmls,
getValue : this.getValue
}));
// Fill in the empty space
var emptyArr = new Array(cols - remainnerArr.length);
emptyArr = emptyArr.join('empty');
emptyArr = emptyArr.split('empty');
// remainder + empty space
remainnerArr = remainnerArr.concat(emptyArr);
if(remainnerArr.length ! = cols){
throw 'Last line length error! The length should be ' + cols;
}
remainnerArr.forEach(addTr.bind({
cols : cols,
htmls: htmls,
getValue : this.getValue
}));
}
return addTable(htmls.join(''));
}
/**
* The default function to get the displayed value. Generally want to override this function.
* @param {Mixed}
* @return {String}
*/
this.getValue = function(data){
return data;
}
/**
* Add a <td></td> for each value. If a line is full add a </tr></tr>
* @param {Mixed} item
* @param {Number} i
* @param {Array} arr
*/
function addTr(item, i, arr){
var html = '<td>' + this.getValue(item) + '</td>';
if(i == 0){
html = '<tr>' + html;
}else if((i + 1) % this.cols == 0 && i ! = 0){
html += '</tr><tr>';
}else if(i == arr.length){
html += '</tr>';
}
this.htmls.push(html);
}
/**
*
* @param {String} html
*/
function addTable(html){
return '<table>' + html + '</table>';
// var table = document.createElement('table');
// table.innerHTML = html;
// table.border="1";
// document.body.appendChild(table);
}
});
});
と思われるかもしれませんが、結局転職することになったので......ちょっとした"テクニカル"問題が障害になりました............。
2019-5-18 JSTLの取り組み。
<%
// Blank cell completion
String tds = ""; int maxTds = 9;
List<? > list = (List<? >)request.getAttribute("list");
for(int i = 0; i < (maxTds - list.size()); i++ ) {
tds += "<td></td>";
}
request.setAttribute("tds", tds);
%>
<table>
<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>
</table>
今回の記事は、HTMLテーブルの空白セル補完を実装する方法についてです。HTMLテーブルの空白セル補完については、スクリプトハウスの過去記事を検索していただくか、以下の関連記事を引き続き閲覧していただき、今後ともスクリプトハウスをよろしくお願いいたします。
関連
-
HTMLとJavaScriptでローカルメディア(ビデオやオーディオ)ファイルを再生する方法
-
htmlのテキストがオーバーフローして省略文字が表示される場合の2つの一般的な解決方法
-
HTMLで2つのdivタグの間に縦線を引く方法
-
HTML ページの読み込み速度を向上させる方法
-
HTMLのdoctypeとエンコーディング
-
iframeのテクニックを使って、訪問者にqqの実装アイデアとサンプルコードを提供する。
-
HTMLページのブラウザタイトルバーに小さなアイコンを表示する方法
-
html/cssの基本 - いくつかの警戒点のhtmlコード作成プロセス(必見)
-
HTML要素のID属性とName属性の違いについて
-
HTMLタグをうまく使ったページ作り
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン