Open wangning0 opened 7 years ago
DOM
DOM(文档对象模型)是针对HTML,XML文档的一个API,DOM描绘了一个层次化的节点树
Node---|--Document-------HTMLDocument | |--characterData---|----Text | |----Comment |--Element------HTMLElement---|--HTMLHeadElement | |--... | |--HTMLButtonElement |--Attr
Javascript的所有节点类型都是继承来自Node类型,因此所有的节点类型都共享着相同的基本属性和方法
nodeType 属性,表明节点的类型
Javascript 通过Document类型表示文档,在浏览器中document对象是HTMLDocument(继承自Document类型)的实例。
domain 获取域名,本身或者上一级域名
referrer 来源页面的URL
getElementById(idName) 取得元素
getElementsByTagName(tagName) 返回一个HTMLCollection对象,该对象和NodeList很相似
anchors 返回所有带name特性的a元素
forms 所有的form元素
images 所有img元素
links 所有带href的a元素
write()
createElement() 创建元素节点
createTextNode 创建文本节点
createAttribute() 创建属性节点
createComment() 创建注释节点
特征:
属性和方法:
文本节点又Text类型表示,包含的是可以照字面解释的纯文本内容,纯文本中可以包含转义后的HTML字符,但不能包含HTML代码。
注释在DOM中是通过Comment类型来表示的
元素的特性在DOM中以Attr类型来表示
DOM度量
clientWidth/clientHeight: 带padding不带滚动条的内容区域
css的width包括了滚动条
scrollWidth/scrollHeight: 和clientWidth一样,但是包含了整个可以滚动的区域
scrollTop/scrollLeft 溢出部分的距离
offsetWidth/offsetHeight 包含border不包含margin的长度
clientTop/clientLeft top/left的border的长度
offsetParent/offsetLeft/offsetTop: offsetLeft和offsetTop反映了元素相对于它的offsetParent的偏移量。offsetParent是在布局上的父元素。
DOM事件模型
冒泡:自下往上 捕获:自上往下
常用的场景
事件代理可以让你使用一个事件监听器去监听大量的DOM节点的事件。
type (String) — 事件的名称
target (node) — 事件起源的DOM节点
currentTarget?(node) — 当前回调函数被触发的DOM节点
bubbles (boolean) — 指明这个事件是否是一个冒泡事件(接下来会做解释)
preventDefault(function) — 这个方法将阻止浏览器中用户代理对当前事件的相关默认行为被触发。比如阻止a元素的click事件加载一个新的页面
stopPropagation (function) — 这个方法将阻止当前事件链上后面的元素的回调函数被触发,当前节点上针对此事件的其他回调函数依然会被触发。(我们稍后会详细介绍。)
stopImmediatePropagation (function) — 这个方法将阻止当前事件链上所有的回调函数被触发,也包括当前节点上针对此事件已绑定的其他回调函数。
cancelable (boolean) — 这个变量指明这个事件的默认行为是否可以通过调用event.preventDefault来阻止。也就是说,只有cancelable为true的时候,调用event.preventDefault才能生效。
defaultPrevented (boolean) — 这个状态变量表明当前事件对象的preventDefault方法是否被调用过
isTrusted (boolean) — 如果一个事件是由设备本身(如浏览器)触发的,而不是通过JavaScript模拟合成的,那个这个事件被称为可信任的(trusted)
eventPhase (number) — 这个数字变量表示当前这个事件所处的阶段(phase):none(0),
timestamp (number) — 事件发生的时间
选择符API
classList属性
HTML5
兼容模式
document.compatMode 属性可以区别渲染页面是标准的还是混杂的,标准模式是:CSS1Compat, 混杂模式是:BackCompat
document.compatMode
字符集属性
document.charset
自定义数据属性
可以通过元素的dataset属性来访问自定义属性的值,
偏移量
元素的大小由高度、宽度决定,包括所有内边距和滚动条和边框大小,注意不包括外边距
客户区大小
指的是元素内容及内边距所占据的空间大小,clientWidth clientHeight
滚动大小
包含滚动内容的元素的大小
确定元素大小
element.getBoundingClientRect()
返回: top left bottom right width height
事件流
事件流描述的是从页面中接收事件的顺序。IE的事件流是事件冒泡流,Netscape的事件流是事件捕获流
DOM2级事件规定的事件流包括三个阶段:事件捕获阶段、处于目标阶段和事件冒泡阶段
事件处理程序
DOM0级事件处理程序,将一个函数赋值给一个事件处理程序属性
DOM2级事件处理程序,定义了两个方法用于处理指定和删除事件处理程序的操作,addEventListener() removeEventListener()
IE事件处理程序
IE实现了与DOM中类似的两个方法:attachEvent detachEvent 这两个方法接收相同的两个参数:事件处理程序名称和事件处理程序函数,因为IE8及更早版本只支持冒泡,所以通过attachEvent 添加的事件处理程序都会被添加到冒泡阶段
事件对象
再出发DOM上的某个事件时,会产生一个事件对象event,这个对象中包含着所有与事件相关的信息(包括导致事件的元素、类型以及其他与特定事件相关的信息)
IE中的事件对象即event对象,在使用DOM0级方法添加事件处理程序时,event对象作为window对象的一个属性存在
var EventUtil = { addHandler: function(elem, type, handler) { if(elem.addEventListener) { elem.addEventListener(type, handler); } else if(elem.attachEvent) { elem.attachEvent('on' + type, handler); } else { elem['on' + type] = handler; } }, removeHandler: function(elem, type, handler) { if(elem.removeEventListener) { elem.removeEventListener(type, handler); } else if(elem.detachEvent) { elem.detachEvent('on' + type, handler); } else { elem['on' + type] = handler; } }, getEvent: function() { return event ? event : window.event; }, stopPropagation: function(event) { if(event.stopPropagation) { event.stopPropagation(); } else { event.cancelBubble = true; } }, preventDefault: function(event) { if(event.preventDefault) { event.preventDefault(); } else { event.returnValue = false; } }, getTarget: function(event) { return event.target || event.srcElement; } }
事件类型
“DOM3级事件”规定了以下几类事件:
UI事件,当用户与页面上的元素交互时触发
焦点事件
焦点从页面中的一个元素移动到另一个元素:
鼠标事件
事件对象中的button属性表示鼠标按钮
在触摸设备
滚轮事件
文本事件
键盘事件
event对象的keyCode属性会包含一个代码,与键盘上一个特定的键对应
合成事件,当为IME(输入法编辑器)输入字符时触发
变动事件,当底层DOM结构发生变化时触发
DOMSubtreeModified 在DOM结构中发生任何变化时触发,这个事件在其他任何事件触发后都会触发
DOMNodeInserted 在一个节点作为子节点被插入到另一个节点被触发
DOMNodeRemoved 在节点从父节点移除时触发
DOMNodeInsertedIntoDocument 在DOMNodeInserted后触发
DOMNodeRemovedFromDocument 在DOMNodeRemoved后触发
DOMAttrModified 特性被修改
DOMCharacterDataModified 文本节点被修改
HTML5事件
DOMContentLoaded事件,window的load事件会在页面中的一切都加载完毕时触发,但这个过程中可能会因为要加载的外部资源过多而耗时长,而DOMContentLoaded事件则在形成完整的DOM树之后就会触发
readystatechange事件,支持readystatechange事件的每个对象都会有一个readyState属性
hashchange事件,event.oldURL,event.newURL
DOM
DOM
Node类型
Javascript的所有节点类型都是继承来自Node类型,因此所有的节点类型都共享着相同的基本属性和方法
nodeType 属性,表明节点的类型
Document 类型
Javascript 通过Document类型表示文档,在浏览器中document对象是HTMLDocument(继承自Document类型)的实例。
domain 获取域名,本身或者上一级域名
referrer 来源页面的URL
getElementById(idName) 取得元素
getElementsByTagName(tagName) 返回一个HTMLCollection对象,该对象和NodeList很相似
anchors 返回所有带name特性的a元素
forms 所有的form元素
images 所有img元素
links 所有带href的a元素
write()
createElement() 创建元素节点
createTextNode 创建文本节点
createAttribute() 创建属性节点
createComment() 创建注释节点
Element 类型
特征:
属性和方法:
Text类型
文本节点又Text类型表示,包含的是可以照字面解释的纯文本内容,纯文本中可以包含转义后的HTML字符,但不能包含HTML代码。
特征:
Comment 类型
注释在DOM中是通过Comment类型来表示的
Attr属性
元素的特性在DOM中以Attr类型来表示
度量
DOM度量
clientWidth/clientHeight: 带padding不带滚动条的内容区域
css的width包括了滚动条
scrollWidth/scrollHeight: 和clientWidth一样,但是包含了整个可以滚动的区域
scrollTop/scrollLeft 溢出部分的距离
offsetWidth/offsetHeight 包含border不包含margin的长度
clientTop/clientLeft top/left的border的长度
offsetParent/offsetLeft/offsetTop: offsetLeft和offsetTop反映了元素相对于它的offsetParent的偏移量。offsetParent是在布局上的父元素。
事件处理(IE 与 W3C的标准不同)
DOM事件模型
事件代理
常用的场景
Event对象
type (String) — 事件的名称
target (node) — 事件起源的DOM节点
currentTarget?(node) — 当前回调函数被触发的DOM节点
bubbles (boolean) — 指明这个事件是否是一个冒泡事件(接下来会做解释)
preventDefault(function) — 这个方法将阻止浏览器中用户代理对当前事件的相关默认行为被触发。比如阻止a元素的click事件加载一个新的页面
stopPropagation (function) — 这个方法将阻止当前事件链上后面的元素的回调函数被触发,当前节点上针对此事件的其他回调函数依然会被触发。(我们稍后会详细介绍。)
stopImmediatePropagation (function) — 这个方法将阻止当前事件链上所有的回调函数被触发,也包括当前节点上针对此事件已绑定的其他回调函数。
cancelable (boolean) — 这个变量指明这个事件的默认行为是否可以通过调用event.preventDefault来阻止。也就是说,只有cancelable为true的时候,调用event.preventDefault才能生效。
defaultPrevented (boolean) — 这个状态变量表明当前事件对象的preventDefault方法是否被调用过
isTrusted (boolean) — 如果一个事件是由设备本身(如浏览器)触发的,而不是通过JavaScript模拟合成的,那个这个事件被称为可信任的(trusted)
eventPhase (number) — 这个数字变量表示当前这个事件所处的阶段(phase):none(0),
timestamp (number) — 事件发生的时间
DOM扩展
选择符API
classList属性
HTML5
兼容模式
document.compatMode
属性可以区别渲染页面是标准的还是混杂的,标准模式是:CSS1Compat, 混杂模式是:BackCompat字符集属性
document.charset
自定义数据属性
可以通过元素的dataset属性来访问自定义属性的值,
元素大小
偏移量
元素的大小由高度、宽度决定,包括所有内边距和滚动条和边框大小,注意不包括外边距
客户区大小
指的是元素内容及内边距所占据的空间大小,clientWidth clientHeight
滚动大小
包含滚动内容的元素的大小
确定元素大小
element.getBoundingClientRect()
返回: top left bottom right width height
事件
事件流
事件流描述的是从页面中接收事件的顺序。IE的事件流是事件冒泡流,Netscape的事件流是事件捕获流
DOM2级事件规定的事件流包括三个阶段:事件捕获阶段、处于目标阶段和事件冒泡阶段
事件处理程序
DOM0级事件处理程序,将一个函数赋值给一个事件处理程序属性
DOM2级事件处理程序,定义了两个方法用于处理指定和删除事件处理程序的操作,addEventListener() removeEventListener()
IE事件处理程序
IE实现了与DOM中类似的两个方法:attachEvent detachEvent 这两个方法接收相同的两个参数:事件处理程序名称和事件处理程序函数,因为IE8及更早版本只支持冒泡,所以通过attachEvent 添加的事件处理程序都会被添加到冒泡阶段
事件对象
再出发DOM上的某个事件时,会产生一个事件对象event,这个对象中包含着所有与事件相关的信息(包括导致事件的元素、类型以及其他与特定事件相关的信息)
IE中的事件对象即event对象,在使用DOM0级方法添加事件处理程序时,event对象作为window对象的一个属性存在
事件类型
“DOM3级事件”规定了以下几类事件:
UI事件,当用户与页面上的元素交互时触发
焦点事件
焦点从页面中的一个元素移动到另一个元素:
鼠标事件
事件对象中的button属性表示鼠标按钮
在触摸设备
滚轮事件
文本事件
键盘事件
event对象的keyCode属性会包含一个代码,与键盘上一个特定的键对应
合成事件,当为IME(输入法编辑器)输入字符时触发
变动事件,当底层DOM结构发生变化时触发
DOMSubtreeModified 在DOM结构中发生任何变化时触发,这个事件在其他任何事件触发后都会触发
DOMNodeInserted 在一个节点作为子节点被插入到另一个节点被触发
DOMNodeRemoved 在节点从父节点移除时触发
DOMNodeInsertedIntoDocument 在DOMNodeInserted后触发
DOMNodeRemovedFromDocument 在DOMNodeRemoved后触发
DOMAttrModified 特性被修改
DOMCharacterDataModified 文本节点被修改
HTML5事件
DOMContentLoaded事件,window的load事件会在页面中的一切都加载完毕时触发,但这个过程中可能会因为要加载的外部资源过多而耗时长,而DOMContentLoaded事件则在形成完整的DOM树之后就会触发
readystatechange事件,支持readystatechange事件的每个对象都会有一个readyState属性
hashchange事件,event.oldURL,event.newURL