为什么删除原有的两行删不掉?和点赞最多的答案区别在哪里?

来源:9-22 编程练习

秦家小小神

2017-02-19 23:23

function del(obj){
        //这种方法会导致已有的两个删不掉!!!
        //var table=document.getElementById("table");
        //table.removeChild(obj.parentNode.parentNode);
        //这是点赞最多的答案
        var tr=obj.parentNode.parentNode;
        tr.parentNode.removeChild(tr);

    }

到底问题出在什么地方?

写回答 关注

3回答

  • 慕运维8096988
    2017-02-23 16:30:35
    已采纳

    因为你取的ID不对,你直接取ID为table的元素,那他的父级父级就找不到元素了,所以无法删除。

    而答案是从他点击事件的那个a标签开始的,所以取3个父级就取到了tr,然后删除就有效。

    秦家小小神

    你好,我当时有点儿懵,现在看你说的地方没有问题啊,我删除的是子节点obj.parentNode.parentNode也就是tr,父节点table也就是tr.parentNode。也就是说,我的代码应该只是正确答案换了种写法,结果却是最初的两行不能删除

    2017-02-27 22:52:36

    共 2 条回复 >

  • 老夫不是宠物
    2017-03-01 12:19:48

    我一开始也遇到了你这个问题,后来我想看看传入的obj.parentNode.parentNode的父级元素即obj.parentNode.parentNode.parentNode到底是不是table,就输入了以下代码。

     function del(obj)
          {
              var table = document.getElementById("table");
              var thetr = obj.parentNode.parentNode;
              alert(thetr.parentNode.nodeName);
          }

    http://img.mukewang.com/58b6481f0001d01502430147.jpg

    结果alert弹出的结果却是TBODY而不是table,后来经过一番寻找,在别人的解答中发现了这张图:

    http://img.mukewang.com/58b6489c0001fe6c02100154.jpg

    "table完整地写法是上述这张图,而我们平时写代码一般都省略其内部的三个子节点<thead> <tfoot> <tbody>,<tr>存在<tbody>中,<tbody>为<tr>父节点,但你运行代码时,浏览器会自动给你添加<thead> <tfoot> <tbody>"


    到这里,我就明白原因了。当我们通过id获取table时,<table>与<tr>之间还有<tbody>。

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

           table.removeChild(obj.parentNode.parentNode);

    在这句代码中,table代表的是<table>节点,obj.parentNode.parentNode代表的是<tr>,由于<table>的子节点是<thead> <tfoot> <tbody>而不是<tr>,所以使用removeChild()删除时会失败。

    而点赞最多的答案即:

            var tr=obj.parentNode.parentNode;

            tr.parentNode.removeChild(tr);

    这里是直接用tr.parentNode来删除tr这个节点(tr.parentNode这个节点一定是tr的父节点吧),  所以可以成功删除。

    你也可以自己编写代码测试一下。   

     


    秦家小小神

    灰常感谢!

    2017-03-01 19:15:00

    共 1 条回复 >

  • qq_这是只仓鼠_0
    2017-02-25 22:33:53

    这回答不靠谱啊 取的ID不是<TABLE >应该也是<A>吧 是obj.的父类的父类 又不是TABLE的父类的父类

    qq_这是只... 回复秦家小小神

    代码给的不全 传值是否正确无法确认 另外ID取table是可以的 这根传进来的OBJ没有关系,你这边是OBJ的PARENT.PARENT OBJ没有问题 跟TABLE半毛钱关系都没有,所以无法删除原有两个很有可能是调用函数时传值问题。

    2017-02-28 00:51:00

    共 3 条回复 >

JavaScript进阶篇

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

468060 学习 · 21891 问题

查看课程

相似问题