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 相关文章推荐
如何用javascript去掉字符串里的所有空格
Feb 08 Javascript
Google排名中的10个最著名的 JavaScript库
Apr 27 Javascript
Mac地址验证的javascript代码
Nov 09 Javascript
JS获取随机数函数可自定义最小值最大值
May 08 Javascript
javascript手风琴下拉菜单实现代码
Nov 12 Javascript
js判断手机访问或者PC的几个例子(常用于手机跳转)
Dec 15 Javascript
JavaScript职责链模式概述
Sep 17 Javascript
简单实现JS倒计时效果
Dec 23 Javascript
Vue实现用户自定义字段显示数据的方法
Aug 28 Javascript
记一次vue去除#问题处理经过小结
Jan 24 Javascript
vue实现配置全局访问路径头(axios)
Nov 01 Javascript
微信小程序以ssm做后台开发的实现示例
Apr 08 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
一道关于php变量引用的面试题
2010/08/08 PHP
使用PHP similar text计算两个字符串相似度
2015/11/06 PHP
Laravel程序架构设计思路之使用动作类
2018/06/07 PHP
JavaScript 验证浏览器是否支持javascript的方法小结
2009/05/17 Javascript
JavaScript 继承详解(二)
2009/07/13 Javascript
原始的js代码和jquery对比体会
2013/09/10 Javascript
基于js与flash实现的网站flv视频播放插件代码
2014/10/14 Javascript
javascript实现多级联动下拉菜单的方法
2015/02/06 Javascript
JS实现文字链接感应鼠标淡入淡出改变颜色的方法
2015/02/26 Javascript
JS动态添加选项案例分析
2016/10/17 Javascript
创建一般js对象的几种方式
2017/01/19 Javascript
微信小程序 开发之顶部导航栏实例代码
2017/02/23 Javascript
基于Require.js使用方法(总结)
2017/10/26 Javascript
详解vuex结合localstorage动态监听storage的变化
2018/05/03 Javascript
jQuery时间戳和日期相互转换操作示例
2018/12/07 jQuery
vue2.0实现的tab标签切换效果(内容可自定义)示例
2019/02/11 Javascript
Vue-CLI 3 scp2自动部署项目至服务器的方法
2020/07/24 Javascript
python3.3实现乘法表示例
2014/02/07 Python
Python的time模块中的常用方法整理
2015/06/18 Python
python snownlp情感分析简易demo(分享)
2017/06/04 Python
python 计算数组中每个数字出现多少次--“Bucket”桶的思想
2017/12/19 Python
python爬虫自动创建文件夹的功能
2018/08/01 Python
python五子棋游戏的设计与实现
2019/06/18 Python
tensorflow-gpu安装的常见问题及解决方案
2020/01/20 Python
使用keras根据层名称来初始化网络
2020/05/21 Python
python使用多线程+socket实现端口扫描
2020/05/28 Python
纯CSS实现的大小渐变、渐远效果
2014/04/15 HTML / CSS
联想法国官方网站:Lenovo法国
2018/10/18 全球购物
得到Class的三个过程是什么
2012/08/10 面试题
酒店公关部经理岗位职责
2013/11/24 职场文书
课改先进个人汇报材料
2014/01/26 职场文书
模具专业毕业生自荐书范文
2014/02/19 职场文书
食堂采购员岗位职责
2015/04/03 职场文书
教师教育心得体会
2016/01/19 职场文书
2016年区委书记抓基层党建工作公开承诺书
2016/03/25 职场文书
node.js如何自定义实现一个EventEmitter
2021/07/16 Javascript