var tbody=document.getElementById("table").lastChild; tbody显示未定义,求助
根据浏览器的解释的顺序, 当它读到getElementById("table")的时候,还不知道有table这个东西.
所以你把script代码段放到table以后, getElementById.....这行随意放函数外面还是里面
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>制作一个表格,显示班级的学生信息</title> <script type="text/javascript"> window.onload = function(){ //鼠标移动改变背景,鼠标移到不同行上时背景色改为色值为 #f2f2f2,移开鼠标时则恢复为原背景色 #fff //提示:1.获取表格的行,getElementsByTagName 。2.使用for进行循环,为每行添加事件及背景颜色设置。 var trs=document.getElementsByTagName("tr"); for (var i = 0; i < trs.length; i++) { trs[i].onmouseover=function(){ this.style.backgroundColor="pink"; }; trs[i].onmouseout=function(){ this.style.backgroundColor="#fff"; }; } } // 编写一个函数,供添加按钮调用,动态在表格的最后一行添加一行; // 使用createElement()、innerHTML、appendChild() function addtr(){ var stuNo=prompt("请输入学号:",""); var name=prompt("请输入姓名:",""); var newtr=document.createElement("tr"); newtr.innerHTML='<td>'+stuNo+'</td>'+'<td>'+name+'</td>'+'<td>'+'<a href="javascript:deleteRow();" >删除</a>'+'</td>'; //innerHTML可以解析HTML标签 var tbody=document.getElementById("table").lastChild;//浏览器在table标签下默认添加tbody节点,为什么放到addtr()外面不好使? tbody.appendChild(newtr); } // 使用removeChild()创建删除函数,删除当前行 function deleteRow(){ var tbody=document.getElementById("table").lastChild; tbody.removeChild(this.parentNode.parentNode); } </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:deleteRow();" >删除</a></td><!--在删除按钮上添加点击事件 --> </tr> <tr> <td>xh002</td> <td>刘小芳</td> <td><a href="javascript:deleteRow();" >删除</a></td><!--在删除按钮上添加点击事件 --> </tr> </table> <input type="button" value="添加一行" onclick="addtr()" /><!--在添加按钮上添加点击事件 --> </body> </html>
麻烦把完整代码贴出来
把var tbody=document.getElementById("table").lastChild; 放在了addtr()里了好使了,这是为什么?