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

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

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

    }

到底问题出在什么地方?

正在回答

3 回答

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

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

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

秦家小小神 提问者

非常感谢!
2017-02-23 回复 有任何疑惑可以回复我~
#2

秦家小小神 提问者

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

我一开始也遇到了你这个问题,后来我想看看传入的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://img1.sycdn.imooc.com//58b6481f0001d01502430147.jpg

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

http://img1.sycdn.imooc.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的父节点吧),  所以可以成功删除。

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

 


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

秦家小小神 提问者

灰常感谢!
2017-03-01 回复 有任何疑惑可以回复我~

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

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

qq_这是只仓鼠_0

说错 取的ID就是<TABLE> 但是OBJ就是<a> 所以问题应该不是取的ID
2017-02-25 回复 有任何疑惑可以回复我~
#2

秦家小小神 提问者 回复 qq_这是只仓鼠_0

当时看完觉得是对的。。那么问题到底出在哪啊?求解~
2017-02-27 回复 有任何疑惑可以回复我~
#3

qq_这是只仓鼠_0 回复 秦家小小神 提问者

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

举报

0/150
提交
取消

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

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