removeChild删除表格数据时遇到的问题
2016-03-25 11:26
495 查看
对于删除HTML DOM元素节点这个简单的问题,JavaScript的一些框架和库都提供了一些很好用的方法,但是原生的方法只用removeChild(),removeChild()用法很简单,如下:
但是,在我想用removeChild实现删除table标签中的所有子元素时,遇到了问题,代码如下:
上述代码执行后,却没有按照我期望的那样删除table中的子节点,经过调试并查了一些资料后发现:
如果按上述代码执行,从第一个子节点删除,那么这个循环只能执行一次,也就是只能删除cdNodes[0],应该是因为从头删除子节点会改变cdNodes数组的结构,第二个节点之后的节点会自动向前移,当需要删除原来cdNodes数组中的cdNodes[1]时,它已经变成了cdNodes[0],当再执行ta.removeChild(cdNodes[1])时,删除的已经是原来cdNodes中的第三个元素即cdNodes[2],那么cdNodes[1]就删不掉了。
可以通过如下两种方式解决:
1.顺序删除
2.逆序删除
附:还有一种不用removeChild()实现的简单方法:
var node = document.getElementById('eleId');//要删除的元素节点 node.parentNode.removeChild(node);//通过node的父节点调用removeChild()即可
但是,在我想用removeChild实现删除table标签中的所有子元素时,遇到了问题,代码如下:
var ta = document.getElementById('myTable'); var cdNodes = ta.childNodes;//得到table的所有子节点 for(var i = 0 ; i < cdNodes.length ; i ++){ ta.removeChild(cdNodes[i]); }
上述代码执行后,却没有按照我期望的那样删除table中的子节点,经过调试并查了一些资料后发现:
如果按上述代码执行,从第一个子节点删除,那么这个循环只能执行一次,也就是只能删除cdNodes[0],应该是因为从头删除子节点会改变cdNodes数组的结构,第二个节点之后的节点会自动向前移,当需要删除原来cdNodes数组中的cdNodes[1]时,它已经变成了cdNodes[0],当再执行ta.removeChild(cdNodes[1])时,删除的已经是原来cdNodes中的第三个元素即cdNodes[2],那么cdNodes[1]就删不掉了。
可以通过如下两种方式解决:
1.顺序删除
var ta = document.getElementById('myTable'); var cdNodes = ta.childNodes;//得到table的所有子节点 var l = cdNodes.length;//事先保存cdNodes的初始长度 for(var i = 0 ; i < l ; i ++){ ta.removeChild(cdNodes[0]);//循环删除当前的第一个元素 }
2.逆序删除
var ta = document.getElementById('myTable'); var cdNodes = ta.childNodes;//得到table的所有子节点 for(var i = cdNodes.length -1; i >= 0 ; i --){ ta.removeChild(cdNodes[i]); }//逆序删除,就不会影响cdNodes数组前边的元素结构
附:还有一种不用removeChild()实现的简单方法:
var ta = document.getElementById('myTable'); ta.innerHTML = '';
相关文章推荐
- JQuery1——基础($对象,选择器,对象转换)
- Android学习笔记(二九):嵌入浏览器
- Android java 与 javascript互访(相互调用)的方法例子
- JavaScript演示排序算法
- javascript实现10进制转为N进制数
- 最后一次说说闭包
- Ajax
- 2019年开发人员应该学习的8个JavaScript框架
- HTML中的script标签研究
- 对一个分号引发的错误研究
- 异步流程控制:7 行代码学会 co 模块
- ES6 走马观花(ECMAScript2015 新特性)
- JavaScript拆分字符串时产生空字符的原因
- Canvas 在高清屏下绘制图片变模糊的解决方法
- Redux系列02:一个炒鸡简单的react+redux例子
- JavaScript 各种遍历方式详解
- call/apply/bind 的理解与实例分享