JS 操作Dom节点之CURD
许多优秀的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的更多相关文章
- 原生js操作Dom节点:CRUD
知识点,依然会遗忘.我在思考到底是什么原因.想到研究生考试准备的那段岁月,想到知识体系的建立,知识体系分为正向知识体系和逆向知识体系:正向知识体系可以理解为教科书目录,逆向知识体系可以理解考试真题. ...
- JS 操作Dom节点之样式
为了提高用户体验,我们经常会动态修改Dom节点的样式,各种浏览器差异比较大,我们如何应对?不断尝试,不断总结~! 1. style.getComputedStyle.currentStyle 内嵌样式 ...
- JS操作DOM节点查找
JS中常用的DOM操作事件,包括有节点查找,键盘鼠标事件等等,本文内容介绍DOM的节点查找. <script> window.onload = function(){ //children ...
- JS操作DOM节点大全
1.Javascript删除节点 在Javascript中,只提供了一种删除节点的方法:removeChild(). removeChild() 方法用来删除父节点的一个子节点. 语法:parent. ...
- ionic+微信js-sdk集成初步融合,在子路由页引入js操作dom节点
.controller('yaoheCtrl',['$scope',function ($scope) { $scope.$watch('$viewContentLoaded',function(ev ...
- JavaScript操作DOM节点
DOM (文档对象模型(Document Object Model)) 文档对象模型(Document Object Model,简称DOM),是W3C组织推荐的处理可扩展标志语言的标准编程接口.在网 ...
- 原生JS的DOM节点操作
DOM(Document Object Model/文档对象模型)是针对HTML和XML文档的一个API.DOM节点树:在文档中出现的空格.回车.标签.注释.文本.doctype.标签等都属于DOM节 ...
- js操作DOM对象
js操作DOM对象 (Document Object Model)文档对象模型 nodeType返回值 1:元素节点 2:属性节点 3:文本节点 8:注释节点 9: 文档节点 nodeName 节点 ...
- 原生js操作DOM基础-笔记
原文参考http://mp.weixin.qq.com/s?__biz=MzU3MDA0NTMzMA==&mid=2247485490&idx=1&sn=15197b4b53e ...
随机推荐
- java实现版本号的比较
之前比较客户端版本号,一直用的是String.compareTo,知道出现bug之后才明白了它的不完善地方.它的比较方式是按照字符串的比较来执行的,所以它有不正确的地方.举个例子,之前客户端版本号为: ...
- HDOJ 2071 Max Num
Problem Description There are some students in a class, Can you help teacher find the highest studen ...
- 《程序设计中的组合数学》——polya计数
我们在高中的组合数学中常常会碰到有关涂色的问题,例如:用红蓝两种颜色给正方形的四个顶点涂色,会有几种不同的方案.在当时,我们下意识的认为,正方形的四个顶点是各不相同的,即正方形是固定的.而实际上我们知 ...
- D - Flip tile
题目大意 翻瓷砖(姑且认为题目就是这个意思吧) 农民约翰知道越聪明越快乐的牛产的牛奶越多(神马鬼理论),于是他开始安排牛进行一个智力运动在一个M*N][] = { {,},{,},{,-},{ ...
- 使用MyEclipse实现简单的Servlet程序
1. 创建一个继承于GenericServlet的类 3. 重写Server方法 package cn.school; import java.io.IOException; import javax ...
- iPhone应用中如何避免内存泄露?
如何有效控制iPhone内存管理的对象的所有权与引用计数和以及iPhone内存的自动释放与便捷方法.本文将介绍在iPhone应用中如何避免内存泄露.想了解“在iPhone应用中如何避免内存泄露”就必须 ...
- javaIO流小结(1)
UTF-8的字节占多少个字节? 常用中文字符用utf-8编码占用3个字节(大约2万多字),超大字符集中要占4个字节.在内存中是2个字节,真正写到硬盘上面的是3个字节. GBK.GB2312汉字占2个字 ...
- SCOI2013 多项式的运算
---恢复内容开始--- 又是一道裸数据结构题. 之前受序列操作的蛋疼写法影响,只用一个tag,不知道怎么记,之后看了下别人的,终于领悟要用两个tag,一个add,一个mul,维护相当简单,想清楚就行 ...
- .mtl文件格式解析
最近在导入下载的.OBJ文件,有时会出现只有模型而没有材质渲染的情况.难道材质要自己一点一点重新赋予?抓狂……我知道.OBJ文件用来存储模型信息,观察第一行代码,可以看到材质库文件为mtllib ## ...
- Struts2.xml中result type属性说明
在struts2配置XML里,result中type属性有以下几种: 1.dispatcher:服务器跳转到前台,后面跟着可以是JSP.htm等等前台页面,默认是这种. 2.redirect:客户端跳 ...