【问题标题】:Creating a scrolling html table programmatically以编程方式创建滚动 html 表格
【发布时间】:2012-09-18 06:18:12
【问题描述】:

我对 Web 开发相当陌生,并且一直在搞乱我想添加到我正在处理的网页中的功能。我正在尝试实现一个滚动表,我在其中构建它的行、单元格,并以特定格式以编程方式填充其内容。我让它滚动,已经构建了行/单元格,并用虚拟内容填充了它,但我需要一些帮助格式化它以满足我的需要。

我需要按以下方式格式化:

总体而言,这将是一个 9 宽 x 60 长的表格,其中第一列是所有标题,该行中接下来的 8 个单元格将是数据。这种模式将持续 60 行。

我希望第一列(最左边的列)是所有表头 <th> 的内存地址,以十六进制的 8 的倍数计数(即 00、08、10、18、20,...)最多 300 基 16 或(768 十进制)。我还想将表格中 20 行的每个块与跨越所有 9 个单元格的附加行分开,将其分成块 1、块 2 和块 3 部分(这会将表格的尺寸更改为9x63)。

这是我目前所拥有的:

HTML:设置 div 和 table

<div id="scrollingDiv">
    <table id="contentTable" border="1">
        <!-- Fill table programmatically -->
    </table>
</div>

CSS:设置 div 向上滚动

#scrollingDiv
{
    border: 2px groove black;
    height: 350px;
    width: 350px;
    background: #787878;
    overflow: auto;
}

#contentTable
{
    height: 350px;
    width: 350px;
}

Javascript:构建表格并用虚拟数据填充它

function buildTable()
{
    var memoryTable =document.getElementById("contentTable");

    var rows = new Array();
    var cells = new Array();

    for( var i = 0; i < 60; i++ )
    {
        rows[i]  = memoryTable.insertRow(i);

        for( var x = 0; x < 9; x++ )
        {
            if( x === 0) // Create header cell with memory address
            {
                cells[rows.length - 1] = rows[rows.length - 1].insertCell(x);
                cells[rows.length - 1].innerHTML = "00".bold(); // how to center this also
            }
            else // Create 8 content cells
            {
                cells[rows.length - 1] = rows[rows.length - 1].insertCell(x);
                cells[rows.length - 1].innerHTML = "\xa0";
            }
        }
    }
}

【问题讨论】:

  • 我只做标题单元格,然后循环遍历其他 8 个单元格。这将删除将执行 许多 次的“if”语句。

标签: javascript css html-table


【解决方案1】:

1) 很遗憾,无法通过insertCell() 添加th - 您需要改用普通的createElement/appendChild

2) 对于您的样式问题: 您不需要插入额外的行,您可以相应地设置每 20 行的样式 - 您有两种可能性,具体取决于您考虑的浏览器支持:

-> 简单但不那么跨浏览器兼容的方式:

tr:nth-of-type(20n){
    /*styling example, change at will*/
    border-bottom:5px solid silver;
}

-> 或将循环中的类应用于每 20 行并相应地设置类的样式

编辑:see your modified Example

旁注:尽可能避免使用new Constructor

【讨论】:

  • 我对我的帖子进行了编辑,我想我可以通过粗体来伪造表格标题。我喜欢你关于每 20 行样式的建议,我会搞砸的。我将如何处理您在循环中应用类的第二个建议?
  • @Joey 看看我的示例小提琴。
  • 这似乎与我想要的非常接近,我们已经做到了,有两件事: 1. 我注意到您没有为所有单元格创建一个数组。这样一来,我以后如何处理这些单元格以放置数据或更改其中的信息? 2. 为什么要避免 new 运算符?
  • 1) 如果你想拥有每个单元格的句柄,你需要一个二维数组:cells[row][col] - 你只是用每一行覆盖它们。这就是为什么我最初省略了这一点。但这很容易解决。 2)这只是一个很好的编码问题,您可能需要进一步阅读我提供的链接。
  • 非常感谢您的所有帮助,最后一个问题:假设我想插入另一个跨越所有 9 个单元格的单元格(colSpan 9)而不是每 20 个单元格着色,我该怎么做关于在 javascript 中修改 colspan。另外,只是为了确保..当我稍后回去向单元格添加数据时,我将如何去做,只需抓住 cells[row][col] var 的句柄并以这种方式遍历它?跨度>
猜你喜欢
  • 2012-09-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-01
  • 2019-11-13
  • 1970-01-01
  • 2015-12-05
相关资源
最近更新 更多