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

9-22练习题代码中删除的问题函数和正确函数的结果为什会有区别,问题在哪

<!DOCTYPE html>

<html>

 <head>

  <title> new document </title>  

  <meta http-equiv="Content-Type" content="text/html; charset=gbk"/>   

  <script type="text/javascript"> 

  

      window.onload = function(){

                  

     var tr=document.getElementsByTagName("tr");

          for(var i=0;i<tr.length; i++)

          {

              tr[i].style.backgroundColor="#fff";

        

              bgChange(tr[i]);//不能直接把bgchange放到这,因为如果放这,那执行bg的只是最后一项tr[tr.lengh-1]

           

          }  

        

      } 

     // 鼠标移动改变背景,可以通过给每行绑定鼠标移上事件和鼠标移除事件来改变所在行背景色。

       function bgChange(obj){

           obj.onmouseover=function(){

            obj.style.backgroundColor="#f2f2f2";

        }

        obj.onmouseout=function(){

            obj.style.backgroundColor="#fff";

        }

       }        

     

      // 编写一个函数,供添加按钮调用,动态在表格的最后一行添加子节点;

     

     function add(){

         var tab=document.getElementById("table");

         var tr=document.getElementsByTagName("tr");

         var tr1=document.createElement("tr");

         var td1=document.createElement("td");

         var td2=document.createElement("td");

         var td3=document.createElement("td");

         var n=0;

         for(var i=0;i<tr.length;){i++}

         n=n+i;

         td1.innerHTML="xh00"+n;

         td2.innerHTML="李飞飞";

         td3.innerHTML="<a href='javascript:;'onclick='delet(this)'>删除</a>";

         tr1.appendChild(td1);

         tr1.appendChild(td2);

         tr1.appendChild(td3);

         table.appendChild(tr1);

         bgChange(tr1);

     }

     

   

     

     // 创建删除函数

     

     function delet(obj){

         var tab=document.getElementById("table");

         var tr=obj.parentNode.parentNode;

         tab.removeChild(tr);

         

         

     }

//问题函数

/*

  function delet(obj)

     {

         var tr=obj.parentNode.parentNode;

         tr.parentNode.removeChild(tr);

     }

*/  //正确函数

  </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="delet(this)" >删除</a></td>   <!--在删除按钮上添加点击事件  -->

  </tr>


  <tr>

<td>xh002</td>

<td>刘小芳</td>

<td><a href="javascript:;" onclick="delet(this)">删除</a></td>   <!--在删除按钮上添加点击事件  -->

  </tr>  


  </table>

  <input type="button" value="添加一行" onclick="add()" />   <!--在添加按钮上添加点击事件  -->

 </body>

</html>


正在回答

1 回答

Failed to execute 'removeChild' on 'Node': The node to be removed is not a child of this node.

这一点可以看出table标签中一个tr子节点的,但是代码里面看很明显是正常的,打开chrome的控制台,你会发现浏览器默认在你的tr标签外加上了一个<tbody>标签

     function delet(obj){
         var tab=document.getElementById("table");
         var tr=obj.parentNode.parentNode;
         console.log(tr);这是tr没错
         console.log(tab.children);但这个会只显示一个tbody
         tab.children[0].removeChild(tr);
         
         
     }


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

慕小小白 提问者

懂了,谢谢你?
2017-05-28 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
JavaScript进阶篇
  • 参与学习       468184    人
  • 解答问题       21891    个

本课程从如何插入JS代码开始,带您进入网页动态交互世界

进入课程

9-22练习题代码中删除的问题函数和正确函数的结果为什会有区别,问题在哪

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信