问答详情
源自:9-22 编程练习

大神!关于调用同个函数不同结果的问题

页面生成的两个tr可以全行删除,而新建的tr却只能删除第三个td(a标签),都是调用同个函数,这是哪出错了?

<!DOCTYPE html>

<html>

 <head>

  <title> new document </title>  

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

  <script type="text/javascript"> 

  var num = 3;

      window.onload = function(){

                  

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

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

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

             bgcChange(tr[i]);

        }

}

            

function bgcChange(obj)

     {

        obj.onmouseover=function(){

            obj.style.backgroundColor="#f2f2f2";

        }

        obj.onmouseout=function(){

            obj.style.backgroundColor="#fff";

        }

}

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

     function nEw(){

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

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

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

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

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

         var a = document.createElement("a");

         td1.innerHTML = prompt("请输入学号","xh00" + num);

         td2.innerHTML = prompt("请输入姓名","姓名");

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

         td3.appendChild(a);

         ta.appendChild(tr);

         tr.appendChild(td1);

         tr.appendChild(td2);

         tr.appendChild(td3);

         num++;

         bgcChange(tr);

     }

   

     

     // 创建删除函数  parentNode   removeChild()

     function del(tr){

         tr.parentNode.parentNode.parentNode.removeChild(tr.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:;" onclick="del(this)">删除</a></td>   <!--在删除按钮上添加点击事件  -->

  </tr>


  <tr>

<td>xh002</td>

<td>刘小芳</td>

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

  </tr>  


  </table>

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

 </body>

</html>


提问者:慕盖茨9358327 2018-06-08 15:00

个回答

  • Fishzz
    2018-06-11 14:44:47
    已采纳

    你在创建新的代码块时,

    var a = document.createElement("a");
    a.innerHTML = '<a href="javascript:;" onclick="del(this)" >删除</a>';

    此时,你的<a>标签内容如下:

    <a><a href="javascript:;" onclick="del(this)" >删除</a></a>

    所以多叠加了一层。调用del函数时只能返回到tr进行childNodes删除。


    建议写法:

    function nEw(){         
        var ta = document.getElementById("table");         
        var tr = document.createElement("tr");         
        var td1 = document.createElement("td");         
        var td2 = document.createElement("td");         
        var td3 = document.createElement("td");                  
        td1.innerHTML = prompt("请输入学号","xh00" + num);         
        td2.innerHTML = prompt("请输入姓名","姓名");         
        td3.innerHTML = '<a href="javascript:;" onclick="del(this)" >删除</a>';                  
        ta.appendChild(tr);         
        tr.appendChild(td1);         
        tr.appendChild(td2);         
        tr.appendChild(td3);         
        num++;         
        bgcChange(tr);     
    }


  • 有一个昵称
    2018-06-11 11:56:42

    https://img.mukewang.com/5b1df2cb0001320a03870213.jpg

    注意看这个结构 ,原来的tr是在tbody中,新加的不在tbody 中

  • 慕盖茨9358327
    2018-06-08 15:00:58

    究竟为何???