javascript - 创建一个动态扩展列数以适应屏幕大小的 html 表格

标签 javascript jquery html

我有很长的数据列表(例如,州及其缩写)我想在 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 解决方案,但对任何想法持开放态度。

最佳答案

这是一个无表解决方案的演示。目前仅设置为在页面加载时排列列,并且需要一些小的添加来调整大小处理。

演示:http://jsfiddle.net/DPRsj/

它基于我拥有的 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/

相关文章:

javascript - 在 IE8 中设置单选按钮和复选框的样式

javascript - 使用 javaScript 设置 HTML 属性值

javascript - 将新的内部对象插入到可观察对象数组中并更新 DOM

javascript - Vuejs - 元素用户界面 - 无法关闭带有十字的对话框

Javascript 正则表达式帮助,负向前瞻

javascript - 单击按钮时打开空白窗口

javascript - jquery删除具有特定id的元素

javascript - NODE JS 取消请求

javascript - 正则表达式,替换某些组合

jquery - $(document).ready(function() - 不起作用