JS DOM 操作实现代码


Posted in Javascript onAugust 01, 2010

简单的表格:

<table> 
<tr> 
<td id="TEST"> 
<input type="submit" value="确定"> 
<input type="button" value="取消"> 
</td> 
</tr> 
</table>

经测试:
var td= document.getElementById("TEST"); 
alert(td.childNodes.length);结果为4

百思不得其解,阅读相关资料后,发现原来JS中,空格也是作为一个文本节点,而两个input元素后面都有空格
所以都作为一个文本节点,所以结果为4
删除空格后结果为2
为了处理里面的空格节点,用以下函数来处理
function cleanWhitespace(element) 
{ 
for(var i=0; i<element.childNodes.length; i++) 
{ 
var node = element.childNodes[i]; 
if(node.nodeType == 3 && !/\S/.test(node.nodeValue)) 
{ 
node.parentNode.removeChild(node); 
} 
} 
}

处理结点cleanWhitespace(document.getElementById("TEST"))后,OK,解决
另附:
DOM基本方法
一.直接引用结点
1.document.getElementById(id);
--在文档里面通过id来找结点
2.document.getElementByTagName(tagName);
--返回一个数组,包含对这些结点的引用
--如:document.getElementByTagName("span");将返回所有类型为span的结点
二.间接引用结点
3.element.childNodes
--返回element的所有子结点,可以用element.childNodes[i]的方式来调用
--element.firstChild=element.childNodes[0];
--element.lastChild=element.childNodes[element.childNonts.length-1];
4.element.parentNode
--引用父结点
5.element.nextSibling; //引用下一个兄弟结点
element.previousSibling; //引用上一个兄弟结点
三.获得结点信息
6.nodeName属性获得结点名称
--对于元素结点返回的是标记名称,如:<a herf><a>返回的是"a"
--对于属性结点返回的是属性名称,如:class="test" 返回的是test
--对于文本结点返回的是文本的内容
7.nodeType返回结点的类型
--元素结点返回1
--属性结点返回2
--文本结点返回3
8.nodeValue返回结点的值
--元素结点返回null
--属性结点返回undefined
--文本结点返回文本内容
9.hasChildNodes()判断是否有子结点
10.tagName属性返回元素的标记名称
--这个属性只有元素结点才有,等同于元素结点的nodeName属性
四.处理属性结点
11.每个属性结点都是元素结点的一个属性,可以通过(元素结点.属性名称)访问
12.利用setAttribute()方法给元素结点添加属性
--elementNode.setAttribute(attributeName,attributeValue);
--attributeName为属性的名称,attributeValue为属性的值
13.使用getAttribute()方法获得属性值
--elementNode.getAttribute(attributeName);
五.处理文本结点
14.innerHTML和innerText属性,这两个方法相信大家都很熟悉,不介绍了,值得注意的是无论是ie还是firefox都容易把空格、换行、制表符等当成文本结点。所有一般通过element.childNodes[i]引用文本结点的时候,一般要处理:
<script language"javaScript" type="text/javascript"> 
function cleanWhitespace(element) 
{ 
for(var i=0; i<element.childNotes.length; i++) 
{ 
var node = element.childNodes[i]; 
if(node.nodeType == 3 && !/\S/.test(node.nodeValue)) 
{ 
node.parentNode.removeChild(node); 
} 
} 
} 
</script>

六.改变文档的层次结构
15.document.createElement()方法创建元素结点
--如:document.createElement("Span");
16.document.createTextNode()方法创建文本结点
--如:document.createTextNode(" "); //注:他不会通过html编码,也就是说这里创建的不是空格,而是字符串 
17.使用appendChild()方法添加结点
--parentElement.appendChild(childElement);
18.使用insertBefore()方法插入子节点
--parentNode.insertBefore(newNode,referenceNode);
--newNode为插入的节点,referenceNode为将插入的节点插入到这之前
19.使用replaceChild方法取代子结点
--parentNode.replaceChild(newNode,oldNode);
--注:oldNode必须是parentNode的子结点,
20.使用cloneNode方法复制结点
--node.cloneNode(includeChildren);
--includeChildren为bool,表示是否复制其子结点
21.使用removeChild方法删除子结点
--parentNode.removeChild(childNode);
七.表格的操作
--注:ie中无法直接将一个完整的表格结点插入到文档中
22.添加行和单元格
var _table=document.createElement("table"); //创建表
table.insertRow(i); //在table的第i行插入行
row.insertCell(i); //在row的第i个位置插入单元格
23.引用单元格对象
--table.rows[i].cells[i];
24.删除行和单元格
--table.deleteRow(index);
--row.deleteCell(index);
25.交换两行获得两个单元格的位置
node1.swapNode(node2);
--这个方法在firefox中将出错
通用方法:
function swapNode(node1,node2) 
{ 
var _parent=node1.parentNode; 
var _t1=node1.nextSubling; 
var _t2=node2.nextSubling; 
if(_t1)parent.insertBefore(node2,_t1); 
else _parent.appendChild(node2); 
if(_t2)parent.insertBefore(node1,_t2); 
else _parent.appendChild(node1);
Javascript 相关文章推荐
Javascript 读书笔记索引贴
Jan 11 Javascript
c#+jquery实现获取radio和checkbox的值
Sep 12 Javascript
node.js中的fs.lchown方法使用说明
Dec 16 Javascript
JavaScript基本数据类型及值类型和引用类型
Aug 25 Javascript
让你一句话理解闭包(简单易懂)
Jun 03 Javascript
JavaScript 函数模式详解及示例
Sep 07 Javascript
记录一篇关于redux-saga的基本使用过程
Aug 18 Javascript
JS选取DOM元素常见操作方法实例分析
Dec 10 Javascript
vue.js 打包时出现空白页和路径错误问题及解决方法
Jun 26 Javascript
Layui实现数据表格中鼠标悬浮图片放大效果,离开时恢复原图的方法
Sep 11 Javascript
layui 实现加载动画以及非真实加载进度的方法
Sep 23 Javascript
基于vue 动态菜单 刷新空白问题的解决
Aug 06 Javascript
JQuery自定义事件的应用 JQuery最佳实践
Aug 01 #Javascript
基于jquery的实现简单的表格中增加或删除下一行
Aug 01 #Javascript
Jquery从头学起第四讲 jquery入门教程
Aug 01 #Javascript
关于jquery动态增减控件的一些想法和小插件
Aug 01 #Javascript
jQuery的实现原理的模拟代码 -2 数据部分
Aug 01 #Javascript
jQuery的实现原理的模拟代码 -1 核心部分
Aug 01 #Javascript
jQuery validate 中文API 附validate.js中文api手册
Jul 31 #Javascript
You might like
PHP实现CSV文件的导入和导出类
2015/03/24 PHP
PHP创建文件,并向文件中写入数据,覆盖,追加的实现代码
2016/03/25 PHP
PHP数组操作实例分析【添加,删除,计算,反转,排序,查找等】
2016/12/24 PHP
Laravel统一错误处理为JSON的方法介绍
2020/10/18 PHP
增强的 JavaScript 的 trim 函数的代码
2007/08/13 Javascript
js限制文本框输入长度两种限制方式(长度、字节数)
2012/12/19 Javascript
THREE.JS入门教程(6)创建自己的全景图实现步骤
2013/01/25 Javascript
javascript获取xml节点的最大值(实现代码)
2013/12/11 Javascript
javascript向后台传送相同属性的参数即数组参数
2014/02/17 Javascript
js数组中如何随机取出一个值
2014/06/13 Javascript
移除AngularJS下URL中的#字符的方法
2015/06/19 Javascript
javascript自定义滚动条实现代码
2020/04/20 Javascript
JavaScript事件学习小结(一)事件流
2016/06/09 Javascript
全面了解构造函数继承关键apply call
2016/07/26 Javascript
JavaScript实现复制文章自动添加版权
2016/08/02 Javascript
jQuery插件HighCharts绘制的基本折线图效果示例【附demo源码下载】
2017/03/07 Javascript
浅谈vue-cli加载不到dev-server.js的解决办法
2017/11/24 Javascript
详解Vue This$Store总结
2018/12/17 Javascript
小程序hover-class点击态效果实现
2019/02/26 Javascript
Vue 使用计时器实现跑马灯效果的实例代码
2019/07/11 Javascript
vue 使用v-for进行循环的实例代码详解
2020/02/19 Javascript
Python和php通信乱码问题解决方法
2014/04/15 Python
Python中exit、return、sys.exit()等使用实例和区别
2015/05/28 Python
python制作websocket服务器实例分享
2016/11/20 Python
windows下安装Python的XlsxWriter模块方法
2018/05/03 Python
对Django项目中的ORM映射与模糊查询的使用详解
2019/07/18 Python
python join方法使用详解
2019/07/30 Python
Django 批量插入数据的实现方法
2020/01/12 Python
serialVersionUID具有什么样的特征
2014/02/20 面试题
大学军训通讯稿
2014/01/13 职场文书
学生党员的自我评价范文
2014/03/01 职场文书
参观邀请函范文
2015/02/02 职场文书
建党伟业电影观后感
2015/06/01 职场文书
升学宴家长致辞
2015/07/27 职场文书
SpringBoot整合阿里云视频点播的过程详解
2021/12/06 Java/Android
JavaScript实现两个数组的交集
2022/03/25 Javascript