【发布时间】:2018-05-17 05:50:20
【问题描述】:
为什么这两个函数会给出不同的结果?
var table1 = document.getElementById("table1");
var table2 = document.getElementById("table2");
var register = [
{att1: 1, att2: 2, att3: 3},
{att1: 4, att2: 5, att3: 6},
{att1: 7, att2: 8, att3: 9}
];
//table1.innerHTML = "";
//table2.innerHTML = "";
function drawTable1() {
for (var i = 0; i < register.length; i++) {
table1.innerHTML += "<tr><td>" + register[i].att1 + "</td><td>" + register[i].att2 + "</td><td>" + register[i].att3 + "</td></tr>";
}
}
function drawTable2() {
for (var i = 0; i < register.length; i++) {
table2.innerHTML += "<tr>";
table2.innerHTML += "<td>" + register[i].att1 + "</td>";
table2.innerHTML += "<td>" + register[i].att2 + "</td>";
table2.innerHTML += "<td>" + register[i].att3 + "</td>";
table2.innerHTML += "</tr>";
}
}
drawTable1();
drawTable2();
table {
display: inline;
}
<body>
<table>
<thead>
<tr>
<th>Att1</th>
<th>Att2</th>
<th>Att3</th>
</tr>
</thead>
<tbody id="table1">
</tbody>
</table>
<table>
<thead>
<tr>
<th>Att1</th>
<th>Att2</th>
<th>Att3</th>
</tr>
</thead>
<tbody id="table2">
</tbody>
</table>
</body>
我刚开始接触js,我已经注意到了这个东西。从逻辑的角度来看,我认为这两个函数之间没有区别,第二个函数刚刚被分解以使代码更易于阅读。它应该只是将字符串添加到字符串中,但似乎在每次操作中打开的标签都会被程序关闭,从而产生大量行。
这是为什么?这有什么用?
【问题讨论】:
-
标题错了——“Javascript”(JS 引擎)不做这样的事情,它只知道字符串,而不知道“HTML 标签”。那是浏览器的 HTML => DOM 解析器在工作,它不是“Javascript”的一部分,而是浏览器的一部分。 Javascript 允许在那里发送字符串并操作和查询 DOM,但所有这些的方法都是“浏览器”。
-
谢谢大家!现在说得通了。我将浏览器视为 html 代码的简单解释器,我的想法是代码中的任何错误都会导致渲染错误,我没有意识到它正在积极寻找错误并修复它们,所以我链接了图示的问题在 JS 的问题中。
标签: javascript html arrays for-loop innerhtml