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 ...
随机推荐
- HDOJ(HDU) 2113 Secret Number(遍历数字位数的每个数字)
Problem Description 有一天, KIKI 收到一张奇怪的信, 信上要KIKI 计算出给定数各个位上数字为偶数的和. eg. 5548 结果为12 , 等于 4 + 8 KIKI 很苦 ...
- 如何解决升级WIN服务的时候,不暴力停止服务 达到升级的目的
同一个WIN服务,分别部署在A.B两台服务器上,前面使用netscaler负载均衡 ,A和B被请求频繁,几乎时时刻刻都被请求 .PS:发布WIN服务的正常流程是,停止WIN服务->发布WIN ...
- NOI题库192 生日蛋糕
192:生日蛋糕 总时间限制: 5000ms 内存限制: 65536kB 描述 7月17日是Mr.W的生日,ACM-THU为此要制作一个体积为Nπ的M层生日蛋糕,每层都是一个圆柱体. 设从下往上数第i ...
- 值得关注的 10 个 Python 英文博客
英文原文:http://pythontips.com/2013/07/31/10-python-blogs-worth-following/ 中文翻译参考: http://python.jobbole ...
- F - Wormholes
题目大意: 农民约翰在农场散步的时候发现农场有大量的虫洞,这些虫洞是非常特别的因为它们都是单向通道,为了方便现在把约翰的农田划分成N快区域,M条道路,W的虫洞. 约翰是时空旅行的粉丝,他希望这样做,在 ...
- ganglia Web前端清除当机节点
ganglia默认如果服务器down机也不会在web前段清除该设备,官方文档介绍的办法如下: 1. 登录中央gmeta和gmond机器 2. vi gmond.conf,修改如下,host_dmax默 ...
- 只对safari起作用的css hack
下面的css代码只对safari browser 起作用: .test { width: 200px; height:50px; background-color:red; padding-top: ...
- Java NIO框架Netty demo
Netty是什么 Netty是一个java开源框架.Netty提供异步的.事件驱动的网络应用程序框架和工具,用以快速开发高性能.高可靠性的网络服务器和客户端程序. 也就是说,Netty 是一个基于NI ...
- 【asp.net爬虫】asp.NET分页控件抓取第n页数据 javascript:__doPostBack
最近在模拟HTTP请求抓取数据,但是服务器是asp.net开发的 分页控件代码 <tr> <td align="left">共 210&am ...
- CSS控制LI行字符溢出用省略号取代
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...