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 相关文章推荐
List the Codec Files on a Computer
Jun 18 Javascript
js下写一个事件队列操作函数
Jul 19 Javascript
基于jquery DOM写的类似微博发布的效果
Oct 20 Javascript
css与javascript跨浏览器兼容性总结
Sep 15 Javascript
JavaScript中的定时器之Item23的合理使用
Oct 30 Javascript
基于js实现的限制文本框只可以输入数字
Dec 05 Javascript
vue通过cookie获取用户登录信息的思路详解
Oct 30 Javascript
微信小程序基于Taro的分享图片功能实践详解
Jul 12 Javascript
layer关闭弹出窗口触发表单提交问题的处理方法
Sep 25 Javascript
JavaScript实现拖拽效果
Mar 16 Javascript
JavaScript实现多球运动效果
Sep 07 Javascript
vue常用高阶函数及综合实例
Feb 25 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
PHP中通过HTTP_USER_AGENT判断是否为手机移动终端的函数代码
2013/02/14 PHP
记录mysql性能查询过程的使用方法
2013/05/02 PHP
浅谈PHP中其他类型转化为Bool类型
2016/03/28 PHP
php防止表单重复提交实例讲解
2019/02/11 PHP
PHP http请求超时问题解决方案
2020/11/13 PHP
利用google提供的API(JavaScript接口)获取网站访问者IP地理位置的代码详解
2010/07/24 Javascript
动态标签 悬停效果 延迟加载示例代码
2013/11/21 Javascript
JQuery中DOM事件合成用法实例分析
2015/06/13 Javascript
jQuery遍历json的方法(推荐)
2016/06/12 Javascript
JS实现兼容各种浏览器的高级拖动方法完整实例【测试可用】
2016/06/21 Javascript
js判断数组key是否存在(不用循环)的简单实例
2016/08/03 Javascript
JS及JQuery对Html内容编码,Html转义
2017/02/17 Javascript
一个可复用的vue分页组件
2017/05/15 Javascript
vue2中filter()的实现代码
2017/07/09 Javascript
浅谈JS封闭函数、闭包、内置对象
2017/07/18 Javascript
vue页面切换到滚动页面显示顶部的实例
2018/03/13 Javascript
Vue使用json-server进行后端数据模拟功能
2018/04/17 Javascript
vue生命周期与钩子函数简单示例
2019/03/13 Javascript
vue请求数据的三种方式
2020/03/04 Javascript
vue v-for出来的列表,点击某个li使得当前被点击的li字体变红操作
2020/07/17 Javascript
vue中echarts引入中国地图的案例
2020/07/28 Javascript
[01:07:20]DOTA2-DPC中国联赛 正赛 Dynasty vs XG BO3 第二场 2月2日
2021/03/11 DOTA
Python输出PowerPoint(ppt)文件中全部文字信息的方法
2015/04/28 Python
轻松实现python搭建微信公众平台
2016/02/16 Python
Python类的继承、多态及获取对象信息操作详解
2019/02/28 Python
Django RBAC权限管理设计过程详解
2019/08/06 Python
浅谈python print(xx, flush = True) 全网最清晰的解释
2020/02/21 Python
pandas中ix的使用详细讲解
2020/03/09 Python
品质主管岗位职责
2014/03/16 职场文书
青春演讲稿范文
2014/05/08 职场文书
教师遵守党的政治纪律情况对照检查材料
2014/09/26 职场文书
淮阳太昊陵导游词
2015/02/10 职场文书
客户答谢会致辞
2015/07/30 职场文书
《我是什么》教学反思
2016/02/16 职场文书
2019年学校消防安全责任书(2篇)
2019/10/09 职场文书
MySQL库表太大怎么办? 数据库分库分表项目实践
2022/04/11 MySQL