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 相关文章推荐
js解析与序列化json数据(一)json.stringify()的基本用法
Feb 01 Javascript
ext前台接收action传过来的json数据示例
Jun 17 Javascript
基于jquery的手风琴图片展示效果实现方法
Dec 16 Javascript
JavaScript数据结构与算法之栈与队列
Jan 29 Javascript
详述JavaScript实现继承的几种方式(推荐)
Mar 22 Javascript
jQuery+ajax的资源回收处理机制分析
Jan 07 Javascript
浅析JavaScript中var that=this
Feb 17 Javascript
Angularjs的$http异步删除数据详解及实例
Jul 27 Javascript
浅谈JS函数节流防抖
Oct 18 Javascript
使用puppeteer破解极验的滑动验证码
Feb 24 Javascript
实现Vue的markdown文档可以在线运行的方法示例
Dec 11 Javascript
微信小程序用户盒子、宫格列表的实现
Jul 01 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中fgetcsv()函数用法实例
2014/11/28 PHP
redis查看连接数及php模拟并发创建redis连接的方法
2016/12/15 PHP
PHP实现的Redis多库选择功能单例类
2017/07/27 PHP
PHP大文件切割上传并带进度条功能示例
2019/07/01 PHP
laravel ORM关联关系中的 with和whereHas用法
2019/10/16 PHP
用showModalDialog弹出页面后,提交表单总是弹出一个新窗口
2009/07/18 Javascript
javascript 面向对象编程 万物皆对象
2009/09/17 Javascript
详解JavaScript逻辑And运算符
2015/12/04 Javascript
JavaScript面向对象分层思维全面解析
2016/11/22 Javascript
bootstrap table分页模板和获取表中的ID方法
2017/01/10 Javascript
Javascript设计模式之装饰者模式详解篇
2017/01/17 Javascript
vue2.0实战之使用vue-cli搭建项目(2)
2017/03/27 Javascript
微信小程序实现点击按钮修改字体颜色功能【附demo源码下载】
2017/12/05 Javascript
Node.js使用MongoDB的ObjectId作为查询条件的方法
2019/09/10 Javascript
vue中如何添加百度统计代码
2020/12/19 Vue.js
浅析Python中将单词首字母大写的capitalize()方法
2015/05/18 Python
Python网络爬虫与信息提取(实例讲解)
2017/08/29 Python
selenium3+python3环境搭建教程图解
2018/12/07 Python
python感知机实现代码
2019/01/18 Python
python自定义时钟类、定时任务类
2021/02/22 Python
详解CSS3选择器:nth-child和:nth-of-type之间的差异
2017/09/18 HTML / CSS
Zadig&Voltaire官网:法国时装品牌
2018/01/05 全球购物
京东港澳售:京东直邮港澳台
2018/01/31 全球购物
英国办公用品商店:Office Outlet
2018/04/04 全球购物
美国50岁以上单身人士约会平台:SilverSingles
2018/06/29 全球购物
Foot Locker澳洲官网:美国运动服和鞋类零售商
2019/10/11 全球购物
俄罗斯GamePark游戏商店网站:购买游戏、游戏机和配件
2020/03/13 全球购物
一组SQL面试题
2016/02/15 面试题
什么是ESB?请介绍一下ESB?
2015/05/27 面试题
销售总监工作职责
2013/11/21 职场文书
英语生日邀请函
2014/01/23 职场文书
中学生秋季运动会广播稿
2014/09/21 职场文书
继续教育心得体会(共6篇)
2016/01/19 职场文书
深度学习小工程练习之垃圾分类详解
2021/04/14 Python
alibaba seata服务端具体实现
2022/02/24 Java/Android
InterProcessMutex实现zookeeper分布式锁原理
2022/03/21 Java/Android