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

新手dom关于删除子节点问题

新手dom关于删除子节点问题

Ni14 2016-12-16 20:08:05
<!DOCTYPE html> <html> <head>     <meta charset="UTF-8">     <title>DOM</title>     <style>         ul li{         }     </style>     <script>         window.onload=function(){             var oTxt=document.getElementById("Txt1");             var oBtn=document.getElementById("Btn1");             var oUl=document.getElementById("ul1");             var oBtn2=document.getElementById("Btn2");             oBtn.onclick=function(){                 var oLi=document.createElement("li");                 var aLi=document.getElementsByTagName("li");                 oLi.innerHTML=oTxt.value;                 // oUl.appendChild(oLi);  //往后插入元素                 if(aLi.length>0){                     oUl.insertBefore(oLi,aLi[0]);                 }else{                     oUl.appendChild(oLi);                 }                 oBtn2.onclick=function(){                     for(var i=0;i<aLi.length;i++){                         oUl.removeChild(aLi[0])                     }                 }             }         }     </script> </head> <body> <input type="text" id="Txt1"> <input type="button" id="Btn1" value="添加li"> <input type="button" id="Btn2" value="删除"> <ul id="ul1">     <li>11111<a href="#">隐藏</a></li>     <li>阿斯顿发生的萨顶顶<a href="#">隐藏</a></li>     <li>zzzzzzzz<a href="#">隐藏</a></li>     <li>qqqqq<a href="#">隐藏</a></li>     <li>SSSSSSSS<a href="#">隐藏</a></li> </ul> </body> </html>我想每次一点删除按钮,可以删除当前ul中的一个li, 为什么这样写出来的效果每次点一下都删两个,而且删的是位于基数次列的li,也就是每次都删掉1,3,5的li  请问问题出在哪里呀??》
查看完整描述

2 回答

已采纳
?
希卡利

TA贡献9条经验 获得超5个赞

少年郎

你想知道为什么每次会删除多个,那是因为你的删除按钮是个循环呀~!

你有六个li 第一次循环后 i == 1 length == 5 第二次 i == 2 length == 4 以此类推

你直接写个 if(aLi.length > 0) oUl.removeChild(aLi[0]) ; 直接删除就完事了

还有这里

                var aLi=document.getElementsByTagName("li");
                if(aLi.length>0){
                    oUl.insertBefore(oLi,aLi[0]);
                }else{
                    oUl.appendChild(oLi);
                }
                //完全没必要这样写呀oUl.insertBefore(oLi,oUl.childNodes[0]);
                就可以完事的,而且你写的这个var aLi=document.getElementsByTagName("li");如果页面上有其他的ul li 是会gg的
                
                建议删除节点的时候每次出发都重新获取一次 li 标签的节点
                var aLi = oUl.childNodes;
                if(aLi.length > 0)


查看完整回答
反对 回复 2016-12-22
  • Ni14
    Ni14
    谢谢你!隔了一天后我也发现了,好蠢的错误…… 不过还是谢谢你!
  • 2 回答
  • 0 关注
  • 1221 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信