我已尝试通过谷歌找到的所有内容,但没有任何工作正常。输出只是一行,列出了数组的所有内容。我需要的是一种编写数组内容的方法,但是在3个单元格之后,自动开始一个新的行。我将发布我在下面提出的代码以及问题。 (是的,这是来自作业。:()
//***(8) place the words in the string "tx_val" in a table with a one pixel border,
//*** with a gray backgound. Use only three cells per row. Empty cells should contain
//*** the word "null". Show the table in the span block with id="ans8"
var count = i % 3;
var nrow = "";
var out = "<table border='1' bgcolor='gray'><tr>"
for (var i=0; i<txArr.length; i++)
{
out += ("<td>" + txArr[i] + "</td>");
count++;
if (count % 3 == 0)
{
nrow += "</tr><tr>";
}
}
document.getElementById('ans8').innerHTML = out + nrow;
答案 0 :(得分:1)
您需要在表格中打印tr
(并添加</table>
!):
var count = i % 3; // btw. what's this??
var nrow = "";
var out = "<table border='1' bgcolor='gray'><tr>"
for (var i=0; i<txArr.length; i++)
{
out += "<td>" + txArr[i] + "</td>";
count++;
if (count % 3 == 0)
out += "</tr><tr>";
}
out += "</table>";
document.getElementById('ans8').innerHTML = out;
答案 1 :(得分:1)
不要试图写出html,而是尝试操纵dom。对我来说似乎更直截了当。看看以下内容:
var row = table.insertRow();
msdn
mdc
var cell = row.insertCell();
msdn
mdc
var cellContent = document.createTextNode(txArr[i]);
msdn
mdc
cell.appendChild(cellContent);
msdn
mdc
要决定何时开始新行,只需使用模数运算符(%
msdn
mdc
)反对i
:
if (i % 3 == 0)
{
row = table.insertRow()
}
你最终会得到这样的东西:
var container = document.getElementById("ans8");
var t = container.appendChild(document.createElement("table"));
var row;
txArr.forEach(function (item, i)
{
if (i % 3 == 0)
{
row = t.insertRow()
}
row.insertCell().appendChild(document.createTextNode(item));
});
我会留下一点让你弄清楚 - 边框,背景颜色,在那里得到“null”这个词。毕竟它是你的作业。 : - )
此外,对于旧版浏览器,您需要add Array.forEach in yourself。
答案 2 :(得分:0)
使用像
这样的东西可能会更容易实现buffer = "<table>";
for(var r = 0; r < 10; r++){
buffer += "<tr>";
for(var c = 0; c < 3 ; c++){
buffer += "<td>Cell: " + r + ":" + c + "</td>";
}
buffer += "</tr>";
}
buffer += "</table>";
document.getElementById("ans8").innerHTML = buffer;
这将为每行创建一个30行长,3列的表。
答案 3 :(得分:0)
您可能会过早地将值分配给“计数”,因为您不知道我到底是什么。并且你没有在任何地方吐出nrow的价值......把它改成了。
var count;
var nrow = "";
var out = "<table border='1' bgcolor='gray'><tr>"
for (var i=0; i<txArr.length; i++)
{
out += ("<td>" + txArr[i] + "</td>");
count++;
if (count % 3 == 0)
{
out += "</tr><tr>";
}
}
document.getElementById('ans8').innerHTML = out + nrow;
答案 4 :(得分:0)
基本上我会把它分成3个功能,以便于阅读和维护。这些函数包括创建单元格,行和表格。这肯定简化了阅读代码。由于我没有测试过,下面是我要做的一个例子。
function createTableCell(value) {
return value == null? "<td>NULL</td>":"<td>" + value + "</td>";
}
function createTableRow(array) {
var returnValue = "";
for (var i = 0; i < array.length; i++) {
returnValue = returnValue + createTableCell(array[i]);
}
return "<tr>" + returnValue + "</tr>";
}
function arrayToTable(array, newRowAfterNArrayElements) {
var returnValue = "<table>";
for (var i = 0; i < array.length; i = i + newRowAfterNArrayElements) {
returnValue = returnValue + createTableRow(array.split(i, (i + newRowAfterNArrayElements) - 1));
}
return returnValue + "</table>";
}
document.getElementById("ans8").innerHTML = arrayToTable(txArr, 3);
此外,这使您的代码更具动态性和可重用性。假设您有一个要在每4个元素拆分的数组。而不是硬编码,你可以简单地传递一个不同的参数。
答案 5 :(得分:0)
我更喜欢使用数组而不是连接
var html = [];
html.push("<table><tr>");
var i = 0;
for (var k in txArr)
{
if(i>=3){
i=0;
html.push("</tr><tr>");
}
html.push("<td>" + txArr[k] + "</td>");
i++;
}
html.push("</tr></table>");
document.getElementById('ans8').innerHTML = html.join('');
// wrapped in function
function arrayToTable(a,cols){
var html = [];
html.push("<table><tr>");
var i = 0;
for (var k in a)
{
if(i>=cols){
i=0;
html.push("</tr><tr>");
}
html.push("<td>" + a[k] + "</td>");
i++;
}
html.push("</tr></table>");
return html.join('')
}
document.getElementById('ans8').innerHTML = arrayToTable(txArr, 3);
答案 6 :(得分:0)
以下是使用DOMBuilder执行此操作的实际示例,以及使用相同的代码生成DOM元素和HTML字符串。
代码:
var dom = DOMBuilder.elementFunctions;
function arrayToTable(a, cols) {
var rows = [];
for (var i = 0, l = a.length; i < l; i += cols) {
rows.push(a.slice(i, i + cols));
}
return dom.TABLE({border: 1, bgcolor: 'gray'},
dom.TBODY(
dom.TR.map(rows, function(cells) {
return dom.TD.map(cells);
})
)
);
}
var data = [1, 2, null, 3, null, 4, null, 5, 6];
document.body.appendChild(arrayToTable(data, 3));
document.body.appendChild(
dom.TEXTAREA({cols: 60, rows: 6},
DOMBuilder.withMode("HTML", function() {
return ""+arrayToTable(data, 3);
})
)
);
答案 7 :(得分:0)
是的,你可以从头开始构建......但是有更快的方法。扔一个网格。网格将采用字符串,数组,json输出等数据并将其转换为正确的HTML输出表,并允许您通过排序,分页,过滤等扩展它。
我个人最喜欢的是DataTables,但还有很多其他人。
一旦你精通,将其中一个设置为5分钟。节省你的大脑力量来治愈世界饥饿,编写下一个facebook等等....