慕码人7255994
2022-05-17 19:23
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script type="text/javascript">
window.onload = function (){
Highlight()
}
// 鼠标移动改变背景,可以通过给每行绑定鼠标移上事件和鼠标移除事件来改变所在行背景色。
function Highlight(){
var trs=document.getElementsByTagName("tr")
for(var i=0;i<trs.length;i++){
trs[i].onmouseover=function(){this.style.backgroundColor="#f2f2f2"}
trs[i].onmouseout=function(){this.style.backgroundColor="#fff"}
}
}
// 编写一个函数,供添加按钮调用,动态在表格的最后一行添加子节点;
function addOne(){
var tbody=document.getElementById("table");
var tr=document.createElement("tr");
var td=document.createElement("td");
td.innerHTML="<input type='text'/>"
tr.appendChild(td);
td=document.createElement("td");
td.innerHTML="<input type='text'/>";
tr.appendChild(td);
td=document.createElement("td");
td.innerHTML="<a href='javascript:;' onclick='deleteRow()'>删除</a>"
tr.appendChild(td)
tbody.appendChild(tr)
Highlight();
}
// 创建删除函数
function deleteRow(){
var trs=document.getElementsByTagName("tr")
for(var i=0;i<trs.length;i++){
trs[i].onclick=function(){this.parentNode.removeChild(this)}
}
}
</script>
</head>
<body>
<table border="1" width="50%" id="table">
<tr>
<th>学号</th>
<th>姓名</th>
<th>操作</th>
</tr>
<tr>
<td>xh001</td>
<td>王小明</td>
<td><a href="javascript:;" onclick="deleteRow()">删除</a></td> <!--在删除按钮上添加点击事件 -->
</tr>
<tr>
<td>xh002</td>
<td>刘小芳</td>
<td><a href="javascript:;" onclick="deleteRow()">删除</a></td> <!--在删除按钮上添加点击事件 -->
</tr>
</table>
<input type="button" value="添加一行" onclick="addOne()"/> <!--在添加按钮上添加点击事件 -->
</body>
</html>
生成新的一行后,再点删除,需要点两遍才能删除这一行,暂未发现原因
同时要注意了,我这种方法的优点是看上去比较清晰,就像写html一样, 但是从性能方面出发 我这种写法会造成一点性能问题,从理论上面讲 比你的那种性能慢.. 但是从我们人的肉眼看上去,不管是你的写法还是我的 都是秒加载.. 所以这个东西就是仁者见仁智者见智了.. 你如果想好一点的阅读性 你就用我的 如果你在乎理论上面那点点点点的性能 你还是保持你自己的.. 写代码这东西比较灵活 没有一定的绝对答案
问题没什么问题,只是这样写显得代码臃肿 不容易一目了然的阅读.. 我这里有一种方法也能实现

JavaScript进阶篇
469067 学习 · 22582 问题
相似问题
回答 2