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 ...
随机推荐
- 转:VS2010解决方案转换到VS2008
原文链接地址:http://www.codeproject.com/Tips/80953/Converting-VS2010-Solution-to-VS2008 如果你使用VS2010的任何版本写代 ...
- POJ 2029 Get Many Persimmon Trees(水题)
题意:在w*h(最大100*100)的棋盘上,有的格子中放有一棵树,有的没有.问s*t的小矩形,最多能含有多少棵树. 解法:最直接的想法,设d[x1][y1][x2][y2]表示选择以(x1, y1) ...
- lightoj 1004 dp:数字三角形
题目链接:http://lightoj.com/volume_showproblem.php?problem=1004 #include <cstdio> #include <cst ...
- Jenkins 十二: 集成 selenium 测试
我的selenium采用的是python版本. 其实 selenium java版本也类似. 1. 在jenkins里面新建selenium 测试项目. 源码管理采用 “Subversion”,输入 ...
- 金牌分析师助力 鲁泰A图谋再造一个“鲁泰”?_财经_中国网
金牌分析师助力 鲁泰A图谋再造一个"鲁泰"?_财经_中国网 金牌分析师助力 鲁泰A图谋再造一个"鲁泰"?
- 在pcDuino上刷了AndDroid,Ubuntu,XBMC
一.Android.Ubuntu.XBMC播放高清视频得比较 1.Andrioid上播放1080P 无压力,硬件解码 2.Ubuntu上用Mplayer播放视频会很卡,可能是没有硬解的原因 3.Ubu ...
- python面向对象【初级篇】
概述 python支持多种编程范式:面向过程.面向对象.面向切面(装饰器部分)等. 面向过程:根据业务逻辑从上到下写垒代码 函数式:将某功能代码封装到函数中,日后便无需重复编写,仅调用函数即可 面向对 ...
- hive 模块
- 关于DPM(Deformable Part Model)算法中模型结构的解释
关于可变部件模型的描写叙述在作者[2010 PAMI]Object Detection with Discriminatively Trained Part Based Models的论文中已经有说明 ...
- cocos2d_android开发简单游戏
1)游戏图层设计: public class WellcomeLayer extends CCLayer { public WellcomeLayer() { this.setIsTouchEnabl ...