许多优秀的Javascript库,已经封装好了丰富的Dom操作函数,这可以加快项目开发效率。但是对于非常注重网页性能的项目来说,使用Dom的原生操作方法还是必要的。

1. 查找节点

 document.getElementById()
//兼容问提:IE低版本不仅检查Id属性,还会检查Name属性,当Name属性匹配参数时也会返回该元素
//解决方法:不要让一个元素name属性和另一个元素的id属性相同 document.getElementsByTagName()
document.getElementsByName()

2. 遍历节点

 parentNode
firstChild
lastChild
previousSibling
nextSibling
childNodes //兼容问题: IE下会把节点间的空白、换行、tab全部忽略;Firefox会认为是文本节点
//解决方法: 遍历节点的时候,使用nodeType nodeValue滤除空白、换行、tab
10 hasChildNode()

3. 节点信息

 nodeType   //元素:1 属性:2  文本:3  文档:9
nodeName //元素:大写标签名 属性:属性名 文本:#text
nodeValue

4. 修改节点

 appendChild(newNode)
insertBefore(newNode [, refNode])
replaceChild(newNode [, refNode])
removeChild(childNode) document.createElement()
document.createTextNode()
document.createDocumentFragment()
getAttribute(name)
setAttribute(name, value) innerHTML

5. 克隆节点

 cloneNode(boolean deep) //默认false,只复制当前节点; true,复制当前节点和其子节点
//兼容问题:IE下会复至节点的事件处理程序
//解决方案:复制之前最好先移除事件处理程序

6. 特殊集合

 document.forms //返回所有from元素集合
document.images //返回所有img元素集合
document.links //返回所有带href属性的a元素集合
document.anchors //返回所有带name属性的a元素集合 //兼容问题:Firefox不支持用()类似,doucment.forms(name)访问集合里的元素
//解决方案:统一用下标的形式获取集合里的元素,document.forms[name]

7. 元素属性

 id
style //style.cssText 批量操作样式
className
title //兼容问题: IE7及以前版本通过setAttribute设置class和style,无效
//解决方案:使用className和style设置其值

8. 动态script、link、style

 //动态加载文件
var script = document.createElement('script');
style.type = 'text/javascript';
script.src = 'your.js';
document.body.applendChild(script); var link= document.createElement(link);
link.rel = 'stylesheet';
link.type = 'text/css';
link.href = 'your.css';
document.getElementsByTagName('head')[0].appendChild(link); //动态创建脚本或样式
var code,
script = document.createElement('script');
script.type = 'text/javascript';
code = '(function(){//...})();';
try {
script.appendChild(document.createTextNode(code));
} catch (e) {
script.text = code;
}
document.body.applendChild(script); //兼容问题:safari 3.0之前版本不支持text,且IE将script视为一个特殊元素,不允许DOM访问其子节点
//解决方案:除IE外所有浏览器支持创建文本节点的方法,IE下使用text属性来设置 var code,
style = document.createElement('style');
style.rel = 'stylesheet';
style.type = 'text/css';
code = '(function(){//...})();';
try {
style.appendChild(document.createTextNode(code));
} catch (e) {
style.stylesheet.cssText = code;
}
document.getElementsByTagName('head')[0].appendChild(style); //兼容问题:IE将style视为一个特殊元素,不允许DOM访问其子节点
//解决方案:除IE外所有浏览器支持创建文本节点的方法,IE下使用styleSheet.cssText属性来设置

9. 操作table

 //table的属性、方法
caption
tHead
tBodies
tFoot
createCaption
deleteCaption
createThead
createTFoot
deleteThead
deleteTFoot //tbody的属性、方法
insertRows(pos) //兼容问题:pos:-1表示追加一行,IE默认为-1,Firefox无默认值; //解决方法:务必指定所以位置
deleteRows(pos)
rows //tr的属性、方法
insertCells(pos)
deleteCells(pos)
cells //兼容问题:IE中table和tr不能使用innerHTML来创建内容
//解决方法:table、tr不要使用innerHTML来创建内容

10. 操作select/option

 //options的属性
selectedIndex //option的属性、方法
text
value
index
selected elmSelect.options.add(new Option(name, value))
elmSelect.options.remove(index)
elmSelect.options[index] //删除所有option
elmSelect.options.length = 0

.Thinking

最后获取集合对象,HTMLCollection(如:document.getElementsByTagName())、NodeList(如:element.childNodes)、NamedNodeMap(如:element.attributes)要注意,这些都是“动态的”,每当文档发生变化时,他们就会更新与文档同步。

 //操作这些集合对象很耗费性能,每当文档变化时,集合对象都会更新

 //Maybe
var elms = document.getElementsByTagName('div'); for (var i = 0; i < elms.length; i++) {
//文档操作
} //Better
for (var i = 0, len = elms.length; i < len; i++) {
//文档操作
}

网页交互涉及到最多操作的地方就是DOM节点,一定要把这些基本的方法烂熟于心。如果项目不要求性能的情况,我们可以大胆使用JS第三方库。请记住不要频繁操作DOM节点,尽量一次性完成DOM节点的修改,将性能损耗降到最低,因为会引起页面的Reflow(回流)和Repaint(重绘)。

Refrence: http://www.quirksmode.org/dom/core/

JS 操作Dom节点之CURD的更多相关文章

  1. 原生js操作Dom节点:CRUD

    知识点,依然会遗忘.我在思考到底是什么原因.想到研究生考试准备的那段岁月,想到知识体系的建立,知识体系分为正向知识体系和逆向知识体系:正向知识体系可以理解为教科书目录,逆向知识体系可以理解考试真题. ...

  2. JS 操作Dom节点之样式

    为了提高用户体验,我们经常会动态修改Dom节点的样式,各种浏览器差异比较大,我们如何应对?不断尝试,不断总结~! 1. style.getComputedStyle.currentStyle 内嵌样式 ...

  3. JS操作DOM节点查找

    JS中常用的DOM操作事件,包括有节点查找,键盘鼠标事件等等,本文内容介绍DOM的节点查找. <script> window.onload = function(){ //children ...

  4. JS操作DOM节点大全

    1.Javascript删除节点 在Javascript中,只提供了一种删除节点的方法:removeChild(). removeChild() 方法用来删除父节点的一个子节点. 语法:parent. ...

  5. ionic+微信js-sdk集成初步融合,在子路由页引入js操作dom节点

    .controller('yaoheCtrl',['$scope',function ($scope) { $scope.$watch('$viewContentLoaded',function(ev ...

  6. JavaScript操作DOM节点

    DOM (文档对象模型(Document Object Model)) 文档对象模型(Document Object Model,简称DOM),是W3C组织推荐的处理可扩展标志语言的标准编程接口.在网 ...

  7. 原生JS的DOM节点操作

    DOM(Document Object Model/文档对象模型)是针对HTML和XML文档的一个API.DOM节点树:在文档中出现的空格.回车.标签.注释.文本.doctype.标签等都属于DOM节 ...

  8. js操作DOM对象

    js操作DOM对象  (Document Object Model)文档对象模型 nodeType返回值 1:元素节点 2:属性节点 3:文本节点 8:注释节点 9: 文档节点 nodeName 节点 ...

  9. 原生js操作DOM基础-笔记

    原文参考http://mp.weixin.qq.com/s?__biz=MzU3MDA0NTMzMA==&mid=2247485490&idx=1&sn=15197b4b53e ...

随机推荐

  1. margin:-75px的理解及妙用——纯CSS制作水平/垂直都居中短边为50px/长边为150px的红色十字架

    有这么一个题目: 使用重构的方式制作出一个如下图的水平.垂直都居中短边为50px,长边为150px的红色十字架. 要求只使用2个div完成 答案: <!DOCTYPE html PUBLIC & ...

  2. POJ3617 Best Cow Line

    其实是学习参考了算法书的代码,但仍然是我自己写的,有小差别.贪心类型. #include <iostream> using namespace std; int main() { int ...

  3. C++设计模式---职责链模式

    职责链模式:使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系.将这个对象连成一条链,并沿这条链传递该请求,直到有一个对象处理它为止. 这里发出这个请求的客户端并不知道这当中的哪一 ...

  4. HTTP协议之状态码详解

    转自:http://www.cnblogs.com/TankXiao/ 什么是HTTP状态码 HTTP状态码的作用是:Web服务器用来告诉客户端,发生了什么事. 状态码位于HTTP Response ...

  5. 解码美国传奇网络券商:TradeStation

    证券时报记者 桂衍民 张欣然 5万客户,交易量却占美国网络券商8%,网络影响力已连续两年被评为全美前五名,说起美国网络证券,必提TradeStation. TradeStation的确是美国证券界的一 ...

  6. 关于openoffice英文乱码的问题

    首先选中乱码的部分,然后在右边的侧栏中看到其字体,尝试改变它的字体,看会不会显示正常,如果可以,先记住这两种字体.然后:    工具->选项->字体        然后在使用替换表打上勾, ...

  7. IE chrome兼容问题

    1.关于display显示和隐藏问题 document.getElementById("id").style.display="";//表示显示 documen ...

  8. php declare (ticks = N)

    A tick is an event that occurs for every N low-level tickable statements executed by the parser with ...

  9. Android运行时注解

    Android的注解有编译时注解和运行时注解,本文就介绍下运行时注解. 其实非常简单,直接上代码:本文主要是替代传统的findViewById()的功能,就是在我们Activity中不需要再使用fin ...

  10. Poj 3368 Frequent values

    /* 线段树区间合并 维护几个信息 到时候乱搞一下就好了 开始T了 有一种情况可以不用递归 直接算出来 */ #include<iostream> #include<cstdio&g ...