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框架veryide.librar源代码
Mar 05 Javascript
Javascript 实现的数独解题算法网页实例
Oct 15 Javascript
Javascript前端UI框架Kit使用指南之Kitjs简介
Nov 28 Javascript
jQuery scrollFix滚动定位插件
Apr 01 Javascript
JS实现模拟风力的雪花飘落效果
May 13 Javascript
10条建议帮助你创建更好的jQuery插件
May 18 Javascript
简介JavaScript中的setTime()方法的使用
Jun 11 Javascript
easyui Draggable组件实现拖动效果
Aug 19 Javascript
JS去掉字符串中所有的逗号
Oct 18 Javascript
openlayers实现图标拖动获取坐标
Sep 25 Javascript
vue-quill-editor插入图片路径太长问题解决方法
Jan 08 Vue.js
vue实现Toast组件轻提示
Apr 10 Vue.js
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
如何将数据从文本导入到mysql
2006/10/09 PHP
一个PHP分页类的代码
2011/05/18 PHP
基于PHP输出缓存(output_buffering)的深入理解
2013/06/13 PHP
PHP以mysqli方式连接类完整代码实例
2014/07/15 PHP
PHP常用工具类大全附全部代码下载
2015/12/07 PHP
thinkphp中AJAX返回ajaxReturn()方法分析
2016/12/06 PHP
JavaScript实现页面滚动图片加载(仿lazyload效果)
2011/07/22 Javascript
25个非常棒的jQuery滑块插件和教程小结
2011/09/02 Javascript
jQuery EasyUI API 中文文档 - EasyLoader 加载器
2011/09/29 Javascript
由Javascript实现的页面日历
2011/11/04 Javascript
jQuery1.6 使用方法二
2011/11/23 Javascript
javascript中checkbox使用方法实例演示
2015/11/19 Javascript
深入浅析JavaScript中数据共享和数据传递
2016/04/25 Javascript
基于jquery实现弹幕效果
2016/09/29 Javascript
js模态对话框使用方法详解
2017/02/16 Javascript
vue动态路由配置及路由传参的方式
2018/05/23 Javascript
jQuery实现表单动态添加数据并提交的方法
2018/07/19 jQuery
Node.js连接Sql Server 2008及数据层封装详解
2018/08/27 Javascript
微信小程序实现横向滚动导航栏效果
2019/12/12 Javascript
[42:06]2019国际邀请赛全明星赛 8.23
2019/09/05 DOTA
python实现批量修改图片格式和尺寸
2018/06/07 Python
Pandas读取并修改excel的示例代码
2019/02/17 Python
Python基于opencv调用摄像头获取个人图片的实现方法
2019/02/21 Python
Mac在python3环境下安装virtualwrapper遇到的问题及解决方法
2019/07/09 Python
Django分组聚合查询实例分享
2020/04/29 Python
实例讲解Python 迭代器与生成器
2020/07/08 Python
python中复数的共轭复数知识点总结
2020/12/06 Python
毕业生实习鉴定
2013/12/11 职场文书
机关门卫岗位职责
2013/12/30 职场文书
关于期中考试的反思
2014/02/02 职场文书
专题组织生活会方案
2014/06/15 职场文书
招商引资工作汇报材料
2014/10/28 职场文书
优秀毕业生主要事迹材料
2015/11/04 职场文书
Windows10下安装MySQL8
2021/04/06 MySQL
详解Python flask的前后端交互
2022/03/31 Python
Pytorch中expand()的使用(扩展某个维度)
2022/07/15 Python