如果div里有这么些内容:

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=GBK">
<title>iScroll demo: simple</title>

<script type="text/javascript">
function deleteData(){  

  }  

</script>

<style type="text/css" media="all">
body,ul,li {
padding:0;
margin:0;
border:0;
}

body {
font-size:12px;
-webkit-user-select:none;
    -webkit-text-size-adjust:none;
font-family:helvetica;
}

</style>
</head>
<body>

  <div ><input type="submit" name="button" id="button" value="删除li节点" class="button gray"  onclick="deleteData()" /> </div> 
 
<div > 
<ul id="thelist">
   <li>Pretty row 1</li>
<li>Pretty row 2</li>
<li>Pretty row 3</li>
<li>Pretty row 4</li>
<li>Pretty row 5</li>
<li>Pretty row 6</li>
<li>Pretty row 7</li>
<li>Pretty row 8</li>
<li>Pretty row 9</li>
<li>Pretty row 10</li>

<li>Pretty row 40</li>
   
</ul>

</div>

</body>
</html>

如今要通过JavaScript的功能。将它们清空。

尽管能够通过一句代码直接实现:

document.getElementById("content").innerHTML=""

可是本文里主要讨论 removeChild 函数。

非常想当然地以为借助以下的代码就能完毕:

function deleteData(){  
         
        var el = document.getElementById('thelist');
        var liNodes = document.getElementsByTagName("li");
          alert(liNodes.length);   
           for(var i = 0; i < liNodes.length; i++){ 
               alert("删除"+i+"   liNodes[i]="+ liNodes[i]);   
                 el.removeChild(liNodes[i]);                
              //<--  el.removeChild(liNodes[i]);                                         
                } 
  } 

没想到,点击了按钮后。居然仅仅清除掉1、3、5...,而2、4、6....居然没有消失,

问题从一開始就产生了:

删除掉第一个节点后,后面节点的顺序所有发生了变化:原来的第二个节点往前蹭,成为新的第一个节点;原来的第三个节点,成为第二个节点……

于是呢,接下来原本是要删除第二个节点的,却将最原始的第三个节点给删除掉了。

终于,并没有所有删除,仅仅删除掉1、3、5。留下了2、4、6。

语法没有错误,可是得不到所要的结果,这就是算法上面的错误!

该怎样修正呢?

“顺序删除”不行,那就“逆序删除”吧。将 for 语句改动一下:

function deleteData(){  
   var el = document.getElementById('thelist');
        var liNodes = document.getElementsByTagName("li");
          alert(liNodes.length);   
             for(var i = liNodes.length-1; i >=0; i--){   
               alert("删除"+i+"   liNodes[i]="+ liNodes[i]);   
                 el.removeChild(liNodes[i]);                
              //<--  el.removeChild(liNodes[i]);                                         
                }        
  }  

试试吧,成功了。还能够使用以下方法:

function deleteData() {
  var el = document.getElementById('thelist');
        var liNodes = document.getElementsByTagName("li");
          alert(liNodes.length);   
for (var i=0;i<el.childNodes.length;i++){
 var childNode = el.childNodes[];  //总是删除第一个,是不是更简单
 el.removeChild(childNode);
}
}

完毕代码例如以下所看到的:

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=GBK">
<title>iScroll demo: simple</title>

<script type="text/javascript">
function initData(){  
   var el = document.getElementById('thelist');
        var liNodes = document.getElementsByTagName("li");
          alert(liNodes.length);   
             for(var i = liNodes.length-1; i >=0; i--){   
               alert("删除"+i+"   liNodes[i]="+ liNodes[i]);   
                 el.removeChild(liNodes[i]);                
              //<--  el.removeChild(liNodes[i]);                                         
                }        
  }  

</script>

<style type="text/css" media="all">
body,ul,li {
padding:0;
margin:0;
border:0;
}

body {
font-size:12px;
-webkit-user-select:none;
    -webkit-text-size-adjust:none;
font-family:helvetica;
}

</style>
</head>
<body>

  <div ><input type="submit" name="button" id="button" value="删除li节点" class="button gray"  onclick="initData()" /> </div> 
 
<div > 
<ul id="thelist">
   <li>Pretty row 1</li>
<li>Pretty row 2</li>
<li>Pretty row 3</li>
<li>Pretty row 4</li>
<li>Pretty row 5</li>
<li>Pretty row 6</li>
<li>Pretty row 7</li>
<li>Pretty row 8</li>
<li>Pretty row 9</li>
<li>Pretty row 10</li>

<li>Pretty row 40</li>
   
</ul>

</div>

</body>
</html>

html5中JavaScript删除全部节点的更多相关文章

  1. openstack中彻底删除计算节点的操作记录

    在使用openstack的过程中,我们经常会添加好几台计算节点来部署虚拟机,在后续使用中由于某些原因,一些计算节点出现了问题,需要将这些出了问题的计算节点从openstack的控制节点中踢出去!但是很 ...

  2. redis cluster中添加删除重分配节点例子

    redis cluster配置好,并运行一段时间后,我们想添加节点,或者删除节点,该怎么办呢. 一,redis cluster命令行     //集群(cluster)  CLUSTER INFO 打 ...

  3. javascript删除元素节点

    1.删除元素父节点 function removeElement(_element){ var _parentElement = _element.parentNode; if(_parentElem ...

  4. [转]Javascript removeChild()删除节点及删除子节点的方法(同样适用于jq)

    Javascript removeChild()删除节点及删除子节点的方法 这篇文章主要介绍了Javascript removeChild()删除节点及删除子节点的方法的相关资料,需要的朋友可以参考下 ...

  5. 使用JavaScript操作DOM节点元素的常用方法(创建/删除/替换/复制等)

    getElementById(id)这是通过id来访问某一元素,最常用的之一,例:<html><body><div id="myid">test ...

  6. html5中的dom中的各种节点的层次关系是怎样的

    html5中的dom中的各种节点的层次关系是怎样的 一.总结 一句话总结:Node节点是所有节点的基类,所以都继承它的方法 1.dom提供在js中动态修改html标签的作用 比如增加修改标签等,并且是 ...

  7. javascript中的删除方法

    可能呢再开发的过程中呢使用的不是很多,但是碰上呢可以注意下 1.比如: var x = 10; delete x; console.log(x); 结果是多少,是10,不是异常也不是undefined ...

  8. GMF中,删除节点和连线的另一种实现

    问题 在GMF中,如果需要programmatically删除节点或连线,在google中我们很容易搜索到<GMF中,删除节点和连线的实现>一文(我并不确定这是原创作者的原始链接),很多人 ...

  9. 【javascript】html5中使用canvas编写头像上传截取功能

    [javascript]html5中使用canvas编写头像上传截取功能 本人对canvas很是喜欢,于是想仿照新浪微博头像上传功能(前端使用canvas) 本程序目前在谷歌浏览器和火狐浏览器测试可用 ...

随机推荐

  1. 解决AndroidStudio导入项目卡在gradle加载界面

    为了节省排版时间,直接上图了,图片若看不清,可在新标签中打开查看. 文中图片上涉及到的一些链接如下: maven { url 'http://maven.aliyun.com/nexus/conten ...

  2. MySQL入门很简单-触发器

    1.触发器是由事件来触发某个操作,这些事件包括insert语句.update语句和delete语句.当数据库系统执行这些事件时,会激活触发器执行相应操作.MySQL从5.0.2开始支持触发器.使用触发 ...

  3. 每天学习一个Linux命令-目录

    在工作中总会零零散散使用到各种Linux命令,从今天开始详细的学习一下linux常用命令,坚持每天一个命令,学习的主要参考资料为: 1.竹子-博客(https://www.cnblogs.com/pe ...

  4. [Linux]Linux read/write

    Read 默认read是block模式,如果想设置非block默认,则open时候参数添加O_NONBLOCK read block模式下,并非等到Buffer满才返回,而是只要有data avaia ...

  5. Java多线程:Java内存模型

    参考资料: 程晓明:Java内存模型 <Java并发编程的艺术> <深入理解Java虚拟机:JVM高级特性与最佳实践>

  6. Docker安装和使用(转)

    (转)原文地址:https://www.cnblogs.com/xiewenming/p/7903247.html 一,安装Docker 1.1 安装之前保持一个干净的Docker环境 sudo yu ...

  7. Android开发怎么让自己的APP UI漂亮、大方(规范篇一)

    首先,笔者是站立在开发者的角度来看UI设计的,欢迎专业人士提供指导,不多说,来看怎么把UI设计和开发高效结合起来~ 一.约定APP开发中的一些规则 1.大部分图标满足HDPI(高清)即可,比如:大众点 ...

  8. mybatis打印完整的sql

    mybatis log plugin

  9. ASCII码与unicode字符集

    问题1:为什么需要字符ASCII码.unicode码等等???它们到底有什么作用? 首先要明白一个事实:在计算机中只能用一系列存储着的0和1,当我们把一个字符存放在计算机时,我们是如何表示常用的字符呢 ...

  10. mac下安装mysql5.7.18,连接出现Access denied for user 'root'@'localhost' (using password: YES)

    mac下,mysql5.7.18连接出错,错误信息为:Access denied for user 'root'@'localhost' (using password: YES) ()里面的为she ...