为了账号安全,请及时绑定邮箱和手机立即绑定

为什么要加lastChild呢?

var tbody = document.getElementById('table').lastChild;

正在回答

5 回答

我也很不明白。查了一下,有个方法倒是值得推荐。那就是看看<table>标签下的子节点到底是什么。

以下就是获得<table>标签下所有的子节点,然后遍历输出子节点的nodeName,nodeValue,nodeType。发现,<table>的子节点有两个,一个是“#text”,一个是“TBODY”。

“#text”的类型为3(文本节点),值是空的,所以应该是<table>和<tbody>之间的空格或者换行部分。

"text"之后的节点就是<Tbody>,而<tr><td><th>这些都是在<tbody>里的,所以要删除表格中的某一行,就得先取得<tbody>节点,也就是<table>的lastChild这个节点了。


57a040b50001ccc104820155.jpg

57a040b500017f2001530057.jpg

1 回复 有任何疑惑可以回复我~
#1

慕函数9642432 提问者

非常感谢!
2016-08-03 回复 有任何疑惑可以回复我~

靠,我也想了好久才貌似弄明白了:

因为table标签的childNodes不是tr而是tbody, 这里虽然省略了tbody没有写, 但是它还是实际存在的

3 回复 有任何疑惑可以回复我~

获取最后的子节点

0 回复 有任何疑惑可以回复我~


<!DOCTYPE html>
<html>
 <head>
  <title> new document </title>  
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>   
  <script type="text/javascript">  
     window.onload = function(){
        Highlight();
     }  
     function addOne(obj){
        var tbody = document.getElementById('table').lastChild;  
        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(this)'>删除</a>";
         tr.appendChild(td);   
        
         tbody.appendChild(tr);   
        Highlight();
        }

     function deleteRow(obj){
        var tbody = document.getElementById('table').lastChild;  
        var tr = obj.parentNode.parentNode;
         tbody.removeChild(tr);
     }
     function Highlight(){
        var tbody = document.getElementById('table').lastChild;    
        trs = tbody.getElementsByTagName('tr');   
        for(var i =1;i<trs.length;i++){
            trs[i].onmouseover = function(){
                this.style.backgroundColor ="#f2f2f2";
            }
            trs[i].onmouseout = function(){
                this.style.backgroundColor ="#fff";
            }
        }  
     }

  </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(this)">删除</a></td>
       </tr>

       <tr>
        <td>xh002</td>
        <td>刘小芳</td>
        <td><a href="javascript:;" onclick="deleteRow(this)">删除</a></td>
       </tr>  

       </table>
       <input type="button" value="添加一行" onclick="addOne()" />
 </body>
</html>

0 回复 有任何疑惑可以回复我~

document.getElementById('table')获取到的是<table>标签,而tbody是<table>的子标签

0 回复 有任何疑惑可以回复我~
#1

慕函数9642432 提问者

要获得的不就是<table>标签吗
2016-07-24 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

为什么要加lastChild呢?

我要回答 关注问题
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号