DOM 基本方法


Posted in Javascript onJuly 18, 2009

直接引用结点
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);
}

删除所有空白结点:
<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>
nodetype=3结点类型是文本\s匹配所有空白
将结点插入指定索引位置
function insertAt(parentNode,newNode,index)
{
if(!parentNode.hasChildNodes())
{
parentNode.appendChild(newNode);
return newNode;
}
//使用try捕获索引不存在出现的异常
try{
parentNode.insertBefore(newNode,parentNode.childNodes[index]);
}
catch(e){
return null;
}
return newNode;

Javascript 相关文章推荐
jQuery 顺便学习下CSS选择器 奇偶匹配nth-child(even)
May 24 Javascript
使用JavaScript进行进制转换将字符串转换为十进制
Sep 21 Javascript
原生js与jQuery实现简单的tab切换特效对比
Jul 30 Javascript
javascript图片预加载完整实例
Dec 10 Javascript
javaScript事件机制兼容【详细整理】
Jul 23 Javascript
a标签置灰不可点击的实现方法
Feb 06 Javascript
AngularJS自定义表单验证功能实例详解
Aug 24 Javascript
如何给element添加一个抽屉组件的方法步骤
Jul 14 Javascript
简单实现节流函数和防抖函数过程解析
Oct 08 Javascript
vue+iview实现文件上传
Nov 17 Vue.js
js实现滚动条自动滚动
Dec 13 Javascript
AJAX实现指定部分页面刷新效果
Oct 16 Javascript
javascript 全角转换实现代码
Jul 17 #Javascript
JavaScript 创建对象
Jul 17 #Javascript
prototype 学习笔记整理
Jul 17 #Javascript
表单元素事件 (Form Element Events)
Jul 17 #Javascript
优化 JavaScript 代码的方法小结
Jul 16 #Javascript
Javascript 事件流和事件绑定
Jul 16 #Javascript
js 对象是否存在判断
Jul 15 #Javascript
You might like
dede3.1分页文字采集过滤规则详说(图文教程)续四
2007/04/03 PHP
写php分页时出现的Fatal error的解决方法
2011/04/18 PHP
thinkPHP显示不出验证码的原因与解决方法分析
2017/05/20 PHP
PHP单文件上传原理及上传函数的封装操作示例
2019/09/02 PHP
在laravel5.2中实现点击用户头像更改头像的方法
2019/10/14 PHP
Laravel框架实现抢红包功能示例
2019/10/31 PHP
PHP 实现链式操作
2021/03/09 PHP
jQuery 学习入门篇附实例代码
2010/03/16 Javascript
dess中一个简单的多路委托的实现
2010/07/20 Javascript
jquery数据验证插件(自制,简单,练手)实例代码
2013/10/24 Javascript
js全选实现和判断是否有复选框选中的方法
2015/02/17 Javascript
深入分析Cookie的安全性问题
2015/03/01 Javascript
JS时间控制实现动态效果的实例讲解
2017/07/31 Javascript
Vue写一个简单的倒计时按钮功能
2018/04/20 Javascript
深入理解react 组件类型及使用场景
2019/03/07 Javascript
JS中实现一个下载进度条及播放进度条的代码
2019/06/10 Javascript
vue 检测用户上传图片宽高的方法
2020/02/06 Javascript
JavaScript适配器模式原理与用法实例详解
2020/03/09 Javascript
Vue实现购物车基本功能
2020/11/08 Javascript
Python 第一步 hello world
2009/09/25 Python
Python多线程学习资料
2012/12/19 Python
Python的函数的一些高阶特性
2015/04/27 Python
Django实现自定义404,500页面教程
2017/03/26 Python
使用python实现ANN
2017/12/20 Python
python实现文件批量编码转换及注意事项
2019/10/14 Python
Python requests接口测试实现代码
2020/09/08 Python
Python全局变量与global关键字常见错误解决方案
2020/10/05 Python
HTML5 canvas基本绘图之绘制阴影效果
2016/06/27 HTML / CSS
印尼最大的婴儿用品购物网站:Orami
2017/09/28 全球购物
丝绸和人造花卉、植物和树木:Nearly Natural
2018/11/28 全球购物
请用Python写一个获取用户输入数字,并根据数字大小输出不同信息的脚本
2014/05/20 面试题
应届生法律顾问求职信
2013/11/19 职场文书
公司离职证明范本(5篇)
2014/09/17 职场文书
授权委托书样本
2014/09/25 职场文书
2019已经过半,你知道年中工作总结该怎么写吗?
2019/07/03 职场文书
Java SSM配置文件案例详解
2021/08/30 Java/Android