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 ...
随机推荐
- Node.js真的有高并发优势吗?看看Node.js和Tomcat的并发测试结果
同一套业务逻辑,实现一个webservice中间接口,中间涉及memcached和mogodb的一些操作.分别在Node.js和JAVA平台实现,java代码部署在Tomcat 7.0上,用Apach ...
- Sublime Text 学习资料
Sublime Text 全程指南 Sublime Text 3 官方下载: http://www.sublimetext.com/3
- J - A Bug's Life - poj2492
这个题目很有意思啊,有一些bug生物(肯定是程序员养的),有人观察他们的生活习惯,观察他们之间是否有同性恋关系,比如ab发生关系,bc发生关系,ab发生关系...产生了同性恋了,你需要判断一下这种关系 ...
- hive 模块
- 导入excel 数据到mysql出现的时间格式
昨天把一张表的数据导出做修改,然后用Navcat 导入,结果总是失败,也看不出问题,说时间格式不对,我看了excel里时间格式对的,之前是excel导出的,搞 了一两个小时,今天发现导入有个选项,我的 ...
- border、margin、padding属性的区别
可以先看下这个视频教程:http://my.tv.sohu.com/us/97014746/64226777.shtml 本文参考:http://www.cnblogs.com/chinhr/arch ...
- 《开源分享2》:《开源框架实战宝典电子书V1.0.0》完整版!
经过一个多月的整理,<J2EE开源框架实战宝典>--Tiny文档PDF电子书開始发放,共同拥有将近600页.为喜爱Tiny.热爱Java开源框架的朋友提供更加体贴的文档服务! 下载地址:h ...
- QT的信号与槽机制介绍
信号与槽作为QT的核心机制在QT编程中有着广泛的应用,本文介绍了信号与槽的一些基本概念.元对象工具以及在实际使用过程中应注意的一些问题. QT是一个跨平台的C++ GUI应用构架,它提供了丰富的窗 ...
- navigaitonBar的自定义设置
navigaitonBar的自定义设置 navigationBar介绍: navigationbar就是一个导航视图控制器上面的导航栏. 如何设置这个navigationbar? 首先我们来探讨如何来 ...
- TabBarController创建及使用方法简介
TabBarController创建及使用方法简介 大致讲解一下TabBarController的创建过程: 首先,我们需要一些视图,如创建UIControllerView类型的view1,view2 ...