DOM总结
一、DOM概念
1、DOM:Document Object Model 文档对象模型
(1) 文档:html页面;
(2) 文档对象:页面中的元素;
(3) 文档对象模型:代表的是一套准则、标准,是WC3组织定义的;为了能够让程序(js)去操作页面中的元素,定义出来的一套标准
2、DMO定义:
DOM为了能够更方便的定义和操作页面中的元素,首先会把当前整个页面看作成一个竖状结构,也就是说DOM会把文档看作是一棵树,同时定义了很多方法来操作这棵树中的每一个元素,我们称之为DOM节点
二、DOM的节点类型 (总共有12种)
1、最常用的是:元素节点:返回1
属性节点:返回2
文本节点:返回3
2、元素.nodeType:只读属性
作用:可以获得当前元素的节点类型
alert(元素.nodeType)
三、属性
(一)获取父级下的子节点
1、元素.childNodes 只读属性 子节点列表的集合
兼容:标准下:包含了文本和元素类型的节点,并且也会包含非法嵌套的子节点;
非标准下:只包含元素类型的节点,IE7以下不会包含非法嵌套子节点;
需要注意的是:childNodes只包含一级子节点,不包含后辈孙级以下的节点
alert(元素.childNodes[0].nodeType); // 通过nodeType可以查看当前元素的节点类型
2、元素.children:只读属性 子节点列表的集合
a : 标准下和非标准下:只包含元素类型的节点
b : 用法与childNodes相同,只是说childNodes是存在兼容问题的
3、元素.attributes:只读属性 属性列表集合
alert(元素.attributes.length); // 元素属性的个数
alert(元素.attributes[0]); // object attr 属性对象
alert(元素.attributes[0].name); // 获得当前属性的名称
alert(元素.attributes[0].value); // 获得当前属性的值
alert(元素.attributes[0].nodeType); // 可以通过nodeType查看节点类型:属性节点 返回2
(二)获取元素的子节点: (用法都是一样的)
1、获取元素下第一个子节点
(1) 元素.firstChild:只读属性 (非标准下获取第一个元素类型的子节点)
标准下:firstChild会包含文本类型的节点
非标准下:只包含元素节点
(2) 元素.firstElementChild:只读属性 (标准下获取第一个元素类型的子节点)
标准下:包含元素节点
非标准下:undefined
(3) 想要做到兼容,可以这样写:
var oFirst = oUl.firstElementChild || oUl.firstChild;
(4) 想要获取元素的第一个子节点,可以用children[0]的方法找到第一个元素
2、获取元素的最后一个子节点:
(1) 元素.lastChild
(2) 元素.lastElementChild
(3) 想要做到兼容,可以这样写:
var oLast = oUl.lastElementChild || oUl.lastChild;
3、获取元素的下一个兄弟节点:
(1)元素.nextSibling
(2)元素.nextElementSibling
4、获取元素的上一个兄弟节点:
(1)元素.previousSibling
(2)元素.previousElementSibling
(三)获取父节点
1、元素.parentNode: 只读属性,父节点,只有一个,没有兼容问题
2、元素.offsetParent: 只读属性,离当前元素最近的一个有定位属性的父节点
需注意的问题:
(1)如果没有定位父级,默认指向body。 ( offsetParent —> body )
(2)IE7以下,如果当前元素没有定位默认指向body,有定位则指向的是html
实例:
#div3{background:red;position:relative;} // 当前元素设置了定位
alert(oDiv3.offsetParent.tagName); // 当前oDiv3在css样式中设置了定位,那么在JS中offsetParent就会指向html
(3)IE7以下,如果当前元素的某个父级触发了layout,那么offsetParent就会被指向到这个触发了layout特性的父节点上
3、offsetLeft、offsetTop
元素.offsetLeft[top]:只读属性,当前元素到定位父级(offsetParent)的距离(也叫偏移值)。
需注意的问题:
(1) 如果没有定位父级:
offsetLeft —> html
(2) 如果有定位父级:
IE7以下: 如果当前元素也有定位,那么就是到定位父级的距离,如果当前元素没有定位,那么就是到body的距离(要想得到兼容,当前元素必须有定位)
其他浏览器: 到定位父级的距离
4、width、height 取值
(1) style.width:样式宽
(2) clientWidth:可视区宽(样式宽+padding)
(3) offsetWidth:占位宽(可视区宽+边框)
四、DOM方法
(一)操作特性的DOM方法
1、元素.getAttribute(属性名称); 获取指定元素的指定属性的值
需要注意的是:
alert(oImg.getAttribute('src')); // 在ie7下获取图片的src还是会返回资源的绝对路径,而标准浏览器返回的是相对路径
2、元素.setAttribute(属性名称); 给指定元素指定的属性设置值,两个参数
实例:
oText.setAttribute( 'value', 'hello' ); // 给value属性设置了'hello'值
3、元素.removeAttribute(属性名称); 移除指定元素的指定的属性
(二)创建元素
父级.createElement(要创建元素的标签名)
(三)操作动态创建出来的节点
1、添加到页面中:
(1) 父级.appendChild(); 追加子元素
(2) 父级.insertBefore(新的元素,被插入的元素); 在指定元素前面插入一个新元素
实例:
oUl.insertBefore(oLi,oUl.children[0]);
存在问题:
a:在ie下如果第二个参数的节点不存在,会报错;
b:在其他标准浏览器下,如果第二个参数的节点不存在,则会以appendChild的形式进行添加
解决方案:
if(oUl.children[0]){
oUl.insertBefore(oLi,oUl.children[0]);
}else{
oUl.appendChild(oLi);
}
2、替换子节点
父级.replaceChild(新节点,被替换节点)
3、删除元素
父级.removeChild(要删除的元素);
五、操作表格的属性和方法
tHead:表格头
tBodies:表格正文
tFoot:表格尾
rows:行
cells:列
六、表单操作
1、可以根据name的值选中当前的表单元素:(每一个表单元素都有name这个属性)
2、onchange事件 当值发生改变的时候触发
(1) 格式:oForm.text1.onchange = function (){ }; // text1 是 name 的值
(2) input表单:
text(文本框):当光标离开的时候如果有内容就会触发;
radio/checkbox:标准下点击的时候只要值变了,那么就会触发;
非标准下焦点离开的时候如果值变了,就会触发;
select:只要选中下拉选项就会触发
3、表单事件
(1) onsubmit: 事件 当提交表单的时候触发
(2) onreset: 事件 当提交表单重置的时候触发
DOM总结的更多相关文章
- 关于DOM的操作以及性能优化问题-重绘重排
写在前面: 大家都知道DOM的操作很昂贵. 然后贵在什么地方呢? 一.访问DOM元素 二.修改DOM引起的重绘重排 一.访问DOM 像书上的比喻:把DOM和JavaScript(这里指ECMScri ...
- 读书笔记:JavaScript DOM 编程艺术(第二版)
读完还是能学到很多的基础知识,这里记录下,方便回顾与及时查阅. 内容也有自己的一些补充. JavaScript DOM 编程艺术(第二版) 1.JavaScript简史 JavaScript由Nets ...
- 页面嵌入dom与被嵌入iframe的攻防
1.情景一:自己的页面被引入(嵌入)至别人的页面iframe中 if(window.self != window.top){ //url是自己页面的url window.top.location.hr ...
- 通俗易懂的来讲讲DOM
DOM是所有前端开发每天打交道的东西,但是随着jQuery等库的出现,大大简化了DOM操作,导致大家慢慢的“遗忘”了它的本来面貌.不过,要想深入学习前端知识,对DOM的了解是不可或缺的,所以本文力图系 ...
- HTML DOM 介绍
本篇主要介绍DOM内容.DOM 节点.节点属性以及获取HTML元素的方法. 目录 1. 介绍 DOM:介绍DOM,以及对DOM分类和功能的说明. 2. DOM 节点:介绍DOM节点分类和节点层次. 3 ...
- HTML DOM 对象
本篇主要介绍HTML DOM 对象:Document.Element.Attr.Event等4个对象. 目录 1. Document 对象:表示文档树的根节点,大部分属性和方法都是对元素进行操作. 2 ...
- 重撸js_2_基础dom操作
1.node 方法 返回 含义 nodeName String 获取节点名称 nodeType Number 获取节点类型 nodeValue String 节点的值(注意:文本也是节点) 2.inn ...
- 虚拟dom与diff算法 分析
好文集合: 深入浅出React(四):虚拟DOM Diff算法解析 全面理解虚拟DOM,实现虚拟DOM
- 窥探Vue.js 2.0 - Virtual DOM到底是个什么鬼?
引言 你可能听说在Vue.js 2.0已经发布,并且在其中新添加如了一些新功能.其中一个功能就是"Virtual DOM". Virtual DOM是什么 在之前,React和Em ...
- jQuery学习之路(2)-DOM操作
▓▓▓▓▓▓ 大致介绍 jQuery作为JavaScript库,继承并发扬了JavaScript对DOM对象操作的特性,使开发人员能方便的操作DOM对象. ▓▓▓▓▓▓ jQuery中的DOM操作 看 ...
随机推荐
- 基于I2C EPPRPM(AT24C02B) + LCD12864实验
本次实验目的:在指定的EPPROM地址中,写入一数据,延时100MS后,在从该地址中读取,并在LCD上显示. 该实验在前两天就开始做了,一开始并没有成功,读出的一直0x00,当时也调了一会,但跳回到P ...
- Python 之路:Python操作 RabbitMQ、Redis、Memcache、SQLAlchemy
一.Memcached Memcached是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负债.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态.数据库驱动网站的速 ...
- Struts2--默认Action
何时使用: 访问的网页不存在, 显示错误页面, 或者显示主页. 有时存在一种情况, 就是找不到对应action 可以在struts.xml里设置一个默认的action <?xml versio ...
- 【转】简单模拟angular的依赖注入
原文:http://www.oschina.net/code/snippet_1181081_35136 代码片段 var angular = function(){}; Object.defineP ...
- 【HighCharts系列教程】一、认识Highcharts
一.什么是HighCharts HighCharts是网页报表工具,开发语言是Javascript HighCharts是一个简单易用.美观.跨平台.跨浏览器的图表工具 HighCharts支持图表的 ...
- 天天记录 - Android抓包 - 抓取HTTP,TCP协议数据
需要两个工具tcpdump和Wireshark, tcpdump的使用需要root权限 一 tcpdump 1. 下载 tcpdump首页 http://www.tcpdump.or ...
- 使用bootstrap建立响应式网页——头部导航栏
1.要建立响应式网站的布局,这个时候bootstrap的高级就能体现出来了. 2.先来了解一下bootstrap提供了哪些响应式工具供我们使用: (1)屏幕宽度尺寸的概念: <768px ...
- 优化EF性能
本文介绍一些改善EF代码.优化其性能的相关方法,如NoTracking,GetObjectByKey, Include等,还包括编译查询.存储模型视图以及冲突处理等内容.. l Mer ...
- Web 网站 故障常用分析命令
系统连接状态篇: 1.查看TCP连接状态 netstat -nat |awk '{print $6}'|sort|uniq -c|sort -rn netstat -n | awk '/^tcp/ { ...
- (简单) FZU 1686 神龙的难题 , DLX+可重复覆盖。
Description 这是个剑与魔法的世界.英雄和魔物同在,动荡和安定并存.但总的来说,库尔特王国是个安宁的国家,人民安居乐业,魔物也比较少.但是.总有一些魔物不时会进入城市附近,干扰人民的生活.就 ...