【发布时间】:2014-08-04 18:24:45
【问题描述】:
<!DOCTYPE html>
<html>
<head>
<script type="text/javascript" src="media/js/jquery.js"></script>
<script>
var table = "";
var example_array = [];
function tablething() {
index = document.getElementById("location").value;
value = document.getElementById("input_value").value;
addRow(index,value);
}
function addRow(index,value){
var rowBeg = "<tr><td>";
var rowEnd = "</td></tr>";
value = rowBeg + value + rowEnd;
example_array.splice(index,0,value);
console.log(example_array);
table.innerHTML = example_array;
console.log(table.innerHTML);
}
$( document ).ready(function() {
table = document.getElementById("example");
example_array = new Array();
});
</script>
</head>
<body>
<table id="example">
</table>
Location: <input type="text" id="location"/>
Value: <input type="text" id="input_value"/>
<button onclick="tablething()">Add</button>
</body>
</html>
控制台中的结果是
Array [ "<tr><td>0</td></tr>" ] dyna_row.html:21
"<tbody><tr><td>0</td></tr></tbody>" dyna_row.html:23
Array [ "<tr><td>0</td></tr>", "<tr><td>1</td></tr>" ] dyna_row.html:21
"<tbody><tr><td>0</td></tr><tr><td>1</td></tr></tbody>," dyna_row.html:23
Array [ "<tr><td>0</td></tr>", "<tr><td>1</td></tr>", "<tr><td>2</td></tr>" ] dyna_row.html:21
"<tbody><tr><td>0</td></tr><tr><td>1</td></tr><tr><td>2</td></tr></tbody>,," dyna_row.html:23
Array [ "<tr><td>0</td></tr>", "<tr><td>1</td></tr>", "<tr><td>2</td></tr>", "<tr><td>3</td></tr>" ] dyna_row.html:21
"<tbody><tr><td>0</td></tr><tr><td>1</td></tr><tr><td>2</td></tr><tr><td>3</td></tr></tbody>,,,"
我的怀疑是
为什么每次调用 addRow 方法时,这段代码都会在 innerHTML 的末尾添加一个逗号?
example_array.join("") 似乎实现了我想要做的,但是 toString 方法是否也没有返回与 join 方法相同的内容?
【问题讨论】:
-
因为...数组在字符串化时有逗号?嗯...
-
不是答案,但你为什么要将数组分配给
innerHTML? -
可能是由于浏览器添加 tbody 的方式,以及两个
标签之间的逗号是无效标记的事实。浏览器通过将逗号移到 tbody 外部来自动更正它。 你应该使用table.innerHTML = example_array.join("");。当浏览器尝试对您的数组进行字符串化时,它会将其转换为“..”、“...”(可能是通过使用不带参数的连接获得“,”作为标准分隔符),这会导致无效的 html,正如@KevinB 所说并产生你得到的输出。@KevinB 你能发布你的 cmets 作为答案吗...?这样我可以接受吗?
标签: javascript html dom