【问题标题】:Dynamic table from user input with cell id as grid reference来自用户输入的动态表格,以单元格 ID 作为网格参考
【发布时间】:2023-03-04 02:24:01
【问题描述】:

我正在尝试创建一个由用户输入数据生成的表。

表格反映了一个网格,因此我希望每个单元格的 id 是该网格的坐标。所以左下角单元格的 id 将是 id00。右上角的单元格 id 将是用户输入的网格的最大尺寸。

例如,如果输入了数据; x值=3; y值=3 这将产生下表:

<table>
<tr><td id="id03"></td><td id="id13"></td><td id="id23"></td><td id="id33"></td></tr>
<tr><td id="id02"></td><td id="id12"></td><td id="id22"></td><td id="id32"></td></tr>    
<tr><td id="id01"></td><td id="id11"></td><td id="id21"></td><td id="id31"></td></tr>
<tr><td id="id00"></td><td id="id10"></td><td id="id20"></td><td id="id30"></td></tr>
</table>

我已经确定了代码的基本概念,如下所示:

<table>
Create a loop,  initial value of r= 0; maximum value of r=y
r =0 <tr> create a secondary  loop, initial value of n=0; maximum value of n = x;  r remains  constant for row
n=0; r= 0 <td  id = “id” + “[x- (x-n)]” +   “[y-r]” > </td>
….
n=3; r= 0* <td id = “id” + “[x- (x-n)]” +   “[y-r]” > </td>
</tr>

….

r =3 <tr> n=0; r= 3 <td  id = “id” + “[x- (x-n)]” +   “[y-r]” > </td>
….
n=3; r= 3<td id = “id” + “[x- (x-n)]” +   “[y-r]” > </td>
</tr>
</table>

我想用 Javascript 开发它,但我是该语言的新手,并且在编码时遇到了麻烦。

任何人都可以提供任何帮助将不胜感激。

【问题讨论】:

  • 你试过我的答案了吗?任何厘米?票?接受吗?
  • 您好 ManseUK,感谢您的回复。我还没有机会尝试它(我想我正在工作)但我快速浏览了 JSfiddle,我可以看到两个问题,首先是 id 应该被读取为网格坐标.你有 x 和 y 错误的方式 - 虽然我不认为这将是两个难以修复?第二个可能更复杂的问题是:如果用户为列(x 值)输入值 3,我希望有 4 列,因为 0 也有列(0、1、2、3)。同样,如果用户输入值 0,则有 1 列。非常感谢。

标签: javascript html-table


【解决方案1】:

试试这个:

var x = 3; // value from input
var y = 4; // value from input

var table = document.getElementById("myTable");
for(var i = 0; i < y; i++) {
    var row = table.insertRow(-1);
    for(var j = 0; j < x; j++) {
        var cell = row.insertCell(-1);
        cell.id = "id" + (j) + (y - i - 1);
        cell.innerHTML = cell.id;        
    }
}
​

Working example

【讨论】:

  • +1 好例子 - 我将代码添加到您的答案中 - 添加代码并包含指向 jsfiddle 的链接而不只是链接
【解决方案2】:

试试这样的:

var rows = parseInt(document.getElementById('rows').value,10); // get input value
var cols = parseInt(document.getElementById('cols').value,10); // get input value
var table = document.createElement('table'); // create table element
table.border = "1"; // set some attributes
var prevrow; // used to store previous row element
for (var r = 0; r < (rows+1); r++) {  // loop rows
    var row = document.createElement('tr'); // create tr
    for (var c = 0; c < (cols+1); c++) { // loop cols
        var col = document.createElement('td'); // create td
        col.id = 'id' + r + c;  // set id of tr
        col.innerHTML = col.id; // add some text
        row.appendChild(col); // append td to tr
    }
    // if first tr then create append to table else insert before previous tr
    if (prevrow) {
        table.insertBefore(row, prevrow);
    } else {
        table.appendChild(row);
    }
    // store newly create tr
    prevrow = row;
}
// append the new table to the output div
document.getElementById('output').appendChild(table);

使用document.createElement()element.appendChild()element.insertBefore()建表

Working example here

【讨论】:

  • 嗨 ManseUK,感谢您的回复,除了我无法解决的一个问题之外,它似乎运行良好:表格代表一个网格,如果用户输入一个值3 列(x 值)我希望有 4 列,因为 0 也有列(0,1,2,3)。类似地,如果用户为行(y 值)输入值 3,则有 4 行。如果用户要为两个输入字段输入 0,那么将有 1 个单元格。如果您能帮助解决最后一个问题,我们将不胜感激,非常感谢。
猜你喜欢
  • 2019-11-10
  • 1970-01-01
  • 2013-01-25
  • 2014-05-25
  • 1970-01-01
  • 1970-01-01
  • 2012-02-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多