我有很长的数据列表(例如,州及其缩写)我想在 HTML 表格中显示。我不希望在 2 x 50 表格中显示数据,而是希望它在更大的屏幕上更紧凑(这样用户就不必上下滚动那么多,但仍然不必水平滚动)
所以这会动态增长:
State | Ab ------------------- Alabama | AL Alaska | AK Arizona | AZ Arkansas | AR California | CA Colorado | CO Connecticut | CT
到:
State | Ab | State | Ab | -------------------------------------- Alabama | AL | California | CA | Alaska | AK | Colorado | CO | Arizona | AZ | Connecticut | CT | Arkansas | AR |
或者这个:
State | Ab | State | Ab | State | Ab | --------------------------------------------------------- Alabama | AL | Arkansas | AR | Colorado | CO | Alaska | AK | California | CA | Connecticut | CT | Arizona | AZ |
等等......
取决于屏幕宽度。
我正在使用 jQuery 在 Rail 3 应用程序中执行此操作,因此我更喜欢 jQuery 解决方案,但对任何想法持开放态度。
最佳答案
这是一个无表解决方案的演示。目前仅设置为在页面加载时排列列,并且需要一些小的添加来调整大小处理。
它基于我拥有的 json 数组,数组如下所示:
[{"state":"AK","name":"Alaska"}........]
可以将 html 发送到页面而无需解析 json,需要在获取状态列表长度方面有细微差别
HTML:
<div id="state_wrap">
<div id="state_header"></div>
<div id="state_list"></div>
</div>
CSS:(非常基础)
.state{ width:150px; border:1px solid grey; border-top:none}
.st_name{ width: 120px;float:left}
.st_ab{ width:30px; margin-left: 120px;}
#state_header .state{
font-weight:bold;
color:blue;
margin-right:10px;
width: 150px;
float:left;
}
.column{ width: 152px; float:left;margin-right:10px;}
JS:
$(function() {
/* parse json to html*/
var html = [];
$.each(states, function() {
html.push(stateContainer(this.name, this.state));
});
html.push('<div style="clear:both"></div>');
$('#state_list').html(html.join(''))
/* END parse json to html*/
var listW = 160, /* column width, including margin, set by css*/
contW = $('#state_wrap').width();
var num_cols = Math.floor(contW / listW)
/* create headings*/
var topHtml = [];
for (i = 0; i < num_cols; i++) {
topHtml.push(stateContainer('State', 'Abr'))
}
$('#state_header').html(topHtml.join(''));
/*END create headings, START: create columns*/
var start = 0,
end = 0;
var state_per_col = Math.floor(states.length / num_cols);
var $states = $('#state_list .state')
for (i = 0; i < num_cols; i++) {
start = end;
end = start + state_per_col + 1;
$states.slice(start, end).wrapAll('<div class="column"></div>')
}
});
function stateContainer(name, abr) {
return '<div class="state"><div class="st_name">' + name + '</div><div class="st_ab">' + abr + '</div></div>';
}
关于javascript - 创建一个动态扩展列数以适应屏幕大小的 html 表格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11238501/