如何使用JavaScript的querySelector实现表格行编辑功能?
问题原因
document.querySelectorAll("table > tbody > tr")获取的是所有tr组成的节点集合,不是你要编辑的某一行,给集合设置innerHTML不会生效- 模板字符串里的HTML标签被转义成了
<、"这类实体字符,浏览器会把它们解析成普通文本,不会渲染成输入框 - 没有用到传入的
index参数定位指定编辑行,默认值"x"是字符串,也无法作为索引取到对应元素
修正后代码
const editRow = (index) => { // 拿到所有行后通过传入的数字索引取到目标编辑行 const trList = document.querySelectorAll("table > tbody > tr"); // 这里增加索引合法性判断,避免报错 if (index < 0 || index >= trList.length) return const targetTr = trList[index]; // 直接写原生HTML标签,不要用转义后的实体字符 const newRow = ` <tr> <td> <input type="text" name="name" /> </td> <td> <input type="text" name="umur" /> </td> <td> <input type="text" name="address" /> </td> <td colspan = 2> <span class="btn btn-info" onClick="saveData()">Save</span> </td> </tr>`; targetTr.innerHTML = newRow; };
优化建议
- 渲染输入框时可以把原有行的内容预先填到输入框的
value属性中,避免用户重新填写全部内容 - 绑定编辑按钮点击事件时,务必传入对应行的数字索引作为
editRow的参数
内容的提问来源于stack exchange,提问作者JS24
相关产品推荐
相关产品推荐

