在 JavaScript 中,我使用 HTML 表格创建一个网格(您在 Photoshop 中看到的网格类型)。网格大小是可变的,即可以由用户更改,因此必须计算每个网格方块的大小并将其除以可用像素数以获得精确大小的网格。
我已经完成了所有这些,但在添加必要的表格元素来创建网格时遇到问题。我的代码处于完整工作状态,除非我使用appendChild()
for 循环内的函数只附加一个子级,而实际上它应该附加到几百个。
My code:
grid.show = function(event)
{
var e = event;
if(grid.show_grid == false)
{
grid.show_grid = true;
parent.document.getElementById("grid_table").style.display = "block";
// Get grid (table) and create some elements.
grid.get_grid = parent.document.getElementById("grid_table");
grid.tr = parent.document.createElement("tr");
grid.td = parent.document.createElement("td");
// Clear the grid of all squares so we don't have to worry about subtracting anything.
grid.get_grid.innerHTML = "";
// Calculate the number of horizontal and vertical squares.
var horizontal = Math.ceil(grid.total_width / grid.size);
var vertical = Math.ceil(grid.total_height / grid.size);
// This was a nested loop, removed for demonstration.
// Attempting to add 10 "<tr><td></td></tr>" to the table.
for(var j = 0; j < 10; j++)
{
grid.tr.appendChild(grid.td);
}
//console.log(grid.tr);
// Add the elements to the table.
grid.get_grid.appendChild(grid.tr);
}
else
{
grid.show_grid = false;
parent.document.getElementById("grid_table").style.display = "none";
}
}
这只返回单个表行,其中包含单个表数据,如下所示:
<tr>
<td></td>
</tr>
我已经看过了这一页 https://stackoverflow.com/questions/1451009/javascript-infamous-loop-problem and 这一页 http://robertnyman.com/2008/10/09/explaining-javascript-scope-and-closures/,它们听起来很有希望,但我就是不知道如何实现这项工作。
EDIT:代码现在可以工作,解决方案:
grid.show = function(event)
{
var e = event;
if(grid.show_grid == false)
{
grid.show_grid = true;
parent.document.getElementById("grid_table").style.display = "block";
grid.get_grid = parent.document.getElementById("grid_table");
grid.tr = null;
grid.td = null;
grid.get_grid.innerHTML = "";
var horizontal = Math.ceil(grid.total_width / grid.size);
var vertical = Math.ceil(grid.total_height / grid.size);
for(var i = 0; i < vertical; i++)
{
grid.tr = parent.document.createElement("tr");
for(var j = 0; j < horizontal; j++)
{
grid.td = parent.document.createElement("td");
grid.td.width = grid.size;
grid.td.height = grid.size;
grid.tr.appendChild(grid.td);
}
grid.get_grid.appendChild(grid.tr);
}
}
else
{
grid.show_grid = false;
parent.document.getElementById("grid_table").style.display = "none";
}
}
您一遍又一遍地附加相同的元素。你需要打电话document.createElement
每次你希望有一个新元素。
编辑:如果元素设置确实很复杂并且可能包含子元素,那么您也可以使用Node.cloneNode https://developer.mozilla.org/en-US/docs/Web/API/Node/cloneNode
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)