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

事件委托解决问题

因为要绑定事件,如果为所有tr的a绑定一个事件去删除的话,节点一多影响效率不说,在后面点击按钮添加的时候,后添加的这些节点还没办法删除,这就非常恼火了,于是用事件委托,完美的可以解决上述两个问题,而且简单!


<!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(){

                  

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

        const table=document.querySelector('table');

        const tbody=document.querySelector('tbody');

        table.onmouseover=function(e){

            if(e.target.parentNode.nodeName==='TR'){

                e.target.parentNode.style.backgroundColor="#f2f2f2";

            }

        }

        table.onmouseout=function(e){

            if(e.target.parentNode.nodeName==='TR'){

                e.target.parentNode.style.backgroundColor="#fff";

            }

        }


        delStu(tbody);

     }

     

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

     function addStu(number,name){

        const obj={

            number,

            name,

            *[Symbol.iterator](){

                yield * Object.values(this); 

            }

        };


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

        for(const value of obj){

            const td=document.createElement("td");

            td.innerText=value;

            tr.appendChild(td);

        }

        const td=document.createElement("td");

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

        a.setAttribute("href","javascript:;");

        a.innerText="删除";

        td.append(a);

        tr.append(td);

        document.querySelector("tbody").appendChild(tr);

     }

     // 创建删除函数

     function delStu(tbody){

        tbody.onclick=function(e){

            if(e.target.nodeName==='A'){

                const {path:[a,b,c]}=e;

                tbody.removeChild(c);

            }

        }

    }



  </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:;" >删除</a></td>   <!--在删除按钮上添加点击事件  -->

       </tr>


       <tr>

        <td>xh002</td>

        <td>刘小芳</td>

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

       </tr>  


       </table>

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

 </body>

</html>



正在回答

1 回答

真无语了,来这装什么东西

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

举报

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

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

进入课程

事件委托解决问题

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