html5中JavaScript removeChild 删除所有节点


Posted in HTML / CSS onMay 16, 2014

假设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[0]; //总是删除第一个,是不是更简单
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>
HTML / CSS 相关文章推荐
一款基于css3的动画按钮代码教程
Nov 23 HTML / CSS
CSS3使用transition实现的鼠标悬停淡入淡出
Jan 09 HTML / CSS
CSS3实现伪类hover离开时平滑过渡效果示例
Aug 10 HTML / CSS
巧用CSS3的calc()宽度计算做响应模式布局的方法
Mar 22 HTML / CSS
详解HTML5新增标签
Nov 27 HTML / CSS
微信html5页面调用第三方位置导航的示例
Mar 14 HTML / CSS
用canvas做一个DVD待机动画的实现代码
Apr 12 HTML / CSS
html2canvas生成清晰的图片实现打印的示例代码
Sep 30 HTML / CSS
5分钟实现Canvas鼠标跟随动画背景
Nov 18 HTML / CSS
AmazeUI在模态框中嵌入表单形成模态输入框
Aug 20 HTML / CSS
浅析HTML5 meta viewport参数
Oct 28 HTML / CSS
详解盒子端CSS动画性能提升
May 24 HTML / CSS
使用jTopo给Html5 Canva中绘制的元素添加鼠标事件
May 15 #HTML / CSS
分享全球十款超强HTML5开发工具
May 14 #HTML / CSS
HTML5实现晶莹剔透的雨滴特效
May 14 #HTML / CSS
HTML 5 input placeholder 属性如何完美兼任ie
May 12 #HTML / CSS
HTML5 embed标签定义和用法详解
May 09 #HTML / CSS
HTML5新增元素如何兼容旧浏览器有哪些方法
May 09 #HTML / CSS
使用html5 canvas创建太空游戏的示例
May 08 #HTML / CSS
You might like
PHP按行读取文件时删除换行符的3种方法
2014/05/04 PHP
PHP动态页生成静态页的3种常用方法
2014/11/13 PHP
php实现四舍五入的方法小结
2015/03/03 PHP
基于php实现随机合并数组并排序(原排序)
2015/11/26 PHP
JSON辅助格式化处理方法
2013/03/26 Javascript
nodejs中转换URL字符串与查询字符串详解
2014/11/26 NodeJs
原生javascript实现隔行换色
2015/01/04 Javascript
js实现同一页面多个运动效果的方法
2015/04/10 Javascript
对于jQuery性能的一些优化建议
2015/08/13 Javascript
jQuery语法小结(超实用)
2015/12/31 Javascript
JavaScript的函数式编程基础指南
2016/03/19 Javascript
AngularJS通过ng-route实现基本的路由功能实例详解
2016/12/13 Javascript
EsLint入门学习教程
2017/02/17 Javascript
Vue列表页渲染优化详解
2017/07/24 Javascript
javascript获取指定区间范围随机数的方法
2017/09/08 Javascript
200行HTML+JavaScript实现年会抽奖程序
2019/01/22 Javascript
vue动画效果实现方法示例
2019/03/18 Javascript
js仿360开机效果
2019/12/26 Javascript
JavaScript中break、continue和return的用法区别实例分析
2020/03/02 Javascript
JS中FormData类实现文件上传
2020/03/27 Javascript
[00:58]PWL开团时刻DAY5——十人开雾0换5
2020/11/04 DOTA
Python复制目录结构脚本代码分享
2015/03/06 Python
玩转python爬虫之URLError异常处理
2016/02/17 Python
Python安装使用命令行交互模块pexpect的基础教程
2016/05/12 Python
对Python发送带header的http请求方法详解
2019/01/02 Python
python脚本执行CMD命令并返回结果的例子
2019/08/14 Python
python 下载m3u8视频的示例代码
2020/11/11 Python
英国领先品牌手动工具和电动工具供应商:Tooled Up
2018/11/24 全球购物
定义一结构体变量,用其表示点坐标,并输入两点坐标,求两点之间的距离
2015/08/17 面试题
商务会议邀请函
2014/01/09 职场文书
学校班班通实施方案
2014/06/11 职场文书
领导视察通讯稿
2015/07/18 职场文书
餐厅服务员管理制度
2015/08/05 职场文书
幼儿园教师暑期培训心得体会
2016/01/09 职场文书
2016年母亲节广告语
2016/01/28 职场文书
Netty分布式客户端接入流程初始化源码分析
2022/03/25 Java/Android