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

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

页面生成的两个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>


正在回答

3 回答

你在创建新的代码块时,

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);     
}


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

慕盖茨9358327 提问者

原来如此~ 感谢兄台解惑!
2018-06-11 回复 有任何疑惑可以回复我~

https://img1.sycdn.imooc.com//5b1df2cb0001320a03870213.jpg

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

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

究竟为何???

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

举报

0/150
提交
取消

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

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