<body>
<table border="1px" width="500px">
<tr>
<th>序号</th>
<th>姓名</th>
<th>年龄</th>
</tr>
<tbody id="hhh">
</tbody>
</table>
<script>
//问题
var tb = document.querySelector("tbody");
tb.innerHTML = "<tr><td>123</td><td>456</td><td>789</td></tr>";
</script>
</body>
<script>
//修改为有id获取元素
var but = document.getElementById("hhh");
but.innerHTML = "<tr><td>123</td><td>456</td><td>789</td></tr>"
</script>
这两种都行
// var tb = document.querySelector("tbody");
// console.log(tb)
// tb.innerHTML+= "<tr><td>123</td><td>456</td><td>789</td></tr>";
var tb = document.getElementById("hhh");
tb.innerHTML+= "<tr><td>123</td><td>456</td><td>789</td></tr>";
再或者给 表头加个 thead
<thead>
<tr>
<th>序号</th>
<th>姓名</th>
<th>年龄</th>
</tr>
</thead>
你要是加了 tbody最好把 thead 也加上,要不然就用id获取 。因为tr 也算 tbody的内容 。你直接 innerhtml = 会覆盖 。要不然就拼接 +=
这边你可以看到,tbody有两个的,而querySelector() 方法仅仅返回匹配指定选择器的第一个元素,所以你的第一种写法就是替换操作
第一张图里面的序号、姓名都被覆盖了,你打开F12看看就会发现序号那个表格外面也是用tbody包裹的
很简单,先不要用js代码。直接浏览器打开你的html代码。然后按下f12,查看文档元素你就会发现有两个tbody标签。而queryselector只会返回选中的最前的第一个,只能返回一个结果。