《JavaScript高级程序设计》第12-13章

第十二章 DOM2和DOM3

1、DOM2和DOM3模块

DOM2级核心:在1级核心的基础上构建,为节点添加了更多的方法和属性

DOM2级视图:为文档定义了基于样式信息的不同视图

DOM2级事件:说明了如何使用事件和DOM文档交互

DOM2级样式:定义了如何以编程方式来访问和改变CSS样式信息

DOM2级遍历和范围:引入了遍历DOM文档和选择其特定部分的新接口

DOM2级HTML:在1级HTML基础上创建,添加了更多属性、方法和新接口

DOM3级XPath模块:

DOM3级加载与保存模块

2、DOM变化

3、样式

1)访问元素的样式:任何支持style特性的HTML元素在JavaScript中都有一个对应的style属性,这个style对象是CSSStyleDeclaration的实例;对于使用短划线的CSS属性名必须将其转换成驼峰大小写形式才能通过JavaScript来访问,不能直接转换的是float属性,应转换为cssFloat(IE则是styleFloat;

2)计算的样式:DOM2级样式增强了document.defaultView,提供了getComputedStyle()方法,接收两个参数——要取得计算样式的元素和一个伪元素字符串(如果不需要伪元素信息,则为null),返回一个CSSStyleDeclaration对象,其中包含当前元素的所有计算的样式;IE不支持getComputedStyle()方法,它有currentStyle属性

3)操作样式表:应用于文档的所有样式表是通过document.styleSheets集合来表示,通过这个集合的length属性可以获知文档中样式表的数量,而通过方括号语法或item()方法可以访问每一个样式表

4、元素大小

1)偏移量

offsetHeight:元素在垂直方向上占用的空间大小

offsetWidth:元素在水平方向上占用的空间大小

offsetLeft:元素的左外边框至包含元素的左内边框之间的像素距离

offsetTop:元素的上外边框至包含元素的上内边框之间的像素距离

2)客户区大小:元素内容及其内边距所占据的空间大小

clientWidth:元素内容区宽度加上左右内边距宽度

clientHeight:元素内容区高度加上上下内边距宽度

3)滚动大小:包含滚动内容的元素大小

scrollHeight:在没有滚动条的情况下,元素内容的总高度

scrollWidtht:在没有滚动条的情况下,元素内容的总宽度

scrollLeft:被隐藏在内容区域左侧的像素数

scrollTop:被隐藏在内容区域上侧的像素数

4)确定元素大小:getBoundingClientRect()方法确定元素在页面中相对于视口的位置,返回一个矩形对象包含四个属性——left、top、right和bottom

5、遍历:基于给定的起点对DOM结构执行深度优先

1)NodeIterator:

创建NodeIterator:document.createNodeIterator(),接收四个参数——root(搜索起点)、whatToShow(被访问节点的数字代码)、filter(一个NodeIterator对象或一个表示应该接受还是拒绝某种特定节点的函数)、entityReferenceExpansion(布尔值,表示是否要扩展实体引用)

操作NodeIterator:nextNode()和previousNode()方法都基于NodeIterator在DOM结构中的内部指针工作

2)TreeWalker

创建TreeWalker:document.TreeWalker(),接受四个参数——作为遍历起点的根节点、要显示的节点类型、过滤器和一个表示是否扩展实体引用的布尔值(同NodeIterator)

操作TreeWalker:nextNode()、previousNode()、parentNode()、firstChild()、lastChild()、nextSibling()、previousSibling

6、范围

1)创建范围:document.createRange()

2)范围属性:startContainer(范围起点)、startOffset(范围在startContainer中起点的偏移量)、endContainer(范围终点)、endOffset(范围在endContainer中终点的偏移量)、commonAncestorContainer:startContainer和endContainer共同的祖先元素在节点树中位置最深的那个

3)操作范围:

selectNode()接收一个参数——一个DOM节点,选择整个节点,包括其子节点,startContainer、endContainer、commonAncestorContainer都等于传入节点的父节点;selectNodeContents()接收一个参数——一个DOM节点,只选择节点的子节点,startContainer、endContainer、commonAncestorContainer都等于传入节点;

setStart()和endStart都接收两个参数——一个参照节点和一个偏移量,对setStart()来说,参照节点为startContainer,偏移量为startOffset,对setEnd()来说,参照节点为endContainer,偏移量为endOffset。

deleteContents()用于从文档中删除范围所包含的内容;cloneContents()用于创建范围对象的一个副本,然后在文档的其他地方插入该副本;

insertNode()用于向范围选取的开始处插入一个节点;

collapse()用于折叠范围,接收一个参数——布尔值,值为true表示折叠到范围的起点,值为false表示折叠到范围的终点;

compareBoundaryPoints()确定这些范围是否有公共的边界(起点或终点),接收两个参数——表示比较方式的常量值和要比较的范围;cloneRange()用于创建调用它的范围的一个副本;detach()用于从创建范围的文档中分离出该范围

第十三章 事件

1、事件流:描述的是从页面中接收事件的顺序

1)事件冒泡:事件开始时由最具体的元素接收,然后逐级向上传播到较为不具体的节点

2)事件捕获:事件开始时由不太具体的节点接收,然后逐级向下传播到最具体的元素

3)DOM事件流:经历三个阶段——事件捕获阶段、处于目标阶段和事件冒泡阶段

2、事件处理程序:事件是用户或浏览器自身执行的某种动作,响应某个事件的函数就是事件处理程序

1)HTML事件处理程序

2)DOM0级事件处理程序:为元素的事件处理程序属性设置一个函数;事件处理程序会在其所属元素的作用域内运行

3)DOM2级事件处理程序:addEventListener()和removeEventListener(),都接收三个参数——要处理的事件名、作为事件处理程序的函数和一个布尔值,布尔值参数如果是true表示在捕获阶段调用事件处理程序,如果是false表示在冒泡阶段调用事件处理程序

4)IE事件处理程序(IE和Opera有效):attachEvent()和detachEvent(),都接收两个参数——事件处理程序名称与事件处理程序函数;由于IE及更早的版本只支持事件冒泡,所以通过attachEvent()添加的事件处理程序都会被添加到冒泡阶段;可以为一个元素添加多个事件处理程序,事件处理程序会在全局作用域中运行,因此this等于window

5)跨浏览器的事件处理程序:addHandler()用于使用DOM0级方法、DOM2级方法或IE方法来添加事件,removeHandler()用于默认使用DOM0级方法法来移除之前添加的事件,都接收三个参数——要操作的元素、事件名称和事件处理程序函数;为了保证处理事件的代码能在大多数浏览器下一致地运行,跨浏览器的事件处理程序只处理事件冒泡

3、事件对象:

1)DOM中的事件对象:

兼容DOM的浏览器会将一个event对象传入到事件处理程序中;

preventDefault()用于阻止特定事件的默认行为,前提是cancelable属性设置为true;stopPropagation()用于立即停止事件在DOM层次中的传播,即取消进一步的事件捕获或冒泡;

currentTarget属性表明其事件处理程序当前正在处理事件的那个元素,始终等于this;target属性表明事件真正的目标;eventPhase属性表明事件当前正处于事件流的哪个阶段,值为1表明事件处于捕获阶段,值为2表明事件处于目标对象上,值为3表明事件处于冒泡阶段;

2)IE中的事件对象:

如果使用DOM0级方法添加事件处理程序时,可以通过window.event取得event对象;如果使用attachEvent()时,那么会有一个event对象作为参数被传入事件处理程序函数中;如果使用HTML特性添加事件处理程序时,可以通过一个event变量来访问event对象;srcElement属性表明事件真正的目标;returnValue属性用于阻止特定事件的默认行为,值为false表明阻止;cancelBubble属性用于立即停止事件在DOM层次中的传播,即取消进一步的事件冒泡,值为true表明停止;

3)跨浏览器的事件对象:getEvent()返回对event对象的引用;getTarget()返回事件的目标,通过检测event对象的target属性,如果存在则返回该属性的值,否则返回srcElement属性的值;preventDefault()用于取消事件的默认行为,如果不存在该方法,则设置returnValue的值为false;stopPropagation()用于阻止事件流,如果不存在该方法,则设置cancelBubble的值为true;

var EventUtil = {

getEvent: function(event){

return event ? event : window.event;

},

getTarget: function(event){

return event.target || event.srcElement;

},

preventDefault: function(event){

if (event.preventDefault){

event.preventDefault();

} else {

event.returnValue = false;

}

},

stopPropagation: function(event){

if (event.stopPropagation){

event.stopPropagation();

} else {

event.cancelBubble = true;

}

}

};

4、事件类型

1)UI事件:指的是那些不一定与用户操作有关的事件

DOMactive:表明元素已经被用户操作(通过鼠标或键盘)激活;

load:当页面完全加载在window上触发;

unload:当页面完全卸载在window上触发;

abort:当用户停止下载过程时,如果嵌入的内容没有加载完,则在<object>元素上触发;

error:当发生JavaScript错误时在window上触发;

select:当用户选择文本框(<input>或<texterea>)中的一或多个字符时触发;

resize:当窗口或框架大小变化时在window上触发;

scroll:当用户滚动带滚动条的元素中的内容时,在该元素上面触发;

2)焦点事件:会在页面元素获得或失去焦点时触发

blur:在元素失去焦点时触发(通用);

DOMFocusIn:在元素获得焦点时触发;

DOMFocusOut:在元素失去焦点时触发;

focus:在元素获得焦点时触发(通用);

focusin:在元素获得焦点时触发;

focusout:在元素失去焦点时触发;

3)鼠标和滚轮事件

click:在用户点击主鼠标按钮或者按下回车键时触发;

dblclick:在用户双击主鼠标按钮时触发;

mousedown:在用户按下了任意鼠标按钮时触发;

mouseenter:在鼠标光标从元素外部首次移动到元素范围之内时触发;

mouseleave:在位于元素上方的鼠标光标移动到元素范围之外时触发;

mousemove:当鼠标指针在元素内部移动时重复触发;

mouseout:在鼠标指针位于一个元素上方,然后用户将其移入另一个元素时触发;

mouseover:在鼠标指针位于一个元素外部,然后用户将其首次移入另一个元素边界之内时触发;

mouseup:在用户释放鼠标按钮时触发;shiftKey、ctrlKey、altKey、metaKey

时间: 2024-08-10 21:29:47

《JavaScript高级程序设计》第12-13章的相关文章

《JavaScript高级程序设计》第1-3章

第一章 JavaScript简介 1.JavaScript实现:由三个不同的部分组成:核心(ECMAScript).文档对象模型(DOM).文档对象模型(BOM) 2.ECMAScript 1)由ECMA-262定义的ECMAScript与Web浏览器没有依赖关系,Web浏览器只是ECMAScript实现的可能宿主环境之一. 2)规定了这门语言的几个组成部分:语法.类型.语句.关键字.保留字.操作符.对象. 3)ECMAScript兼容:支持ECMA-262描述的所有“类型.值.对象.属性.函数

《JAVASCRIPT高级程序设计》第三章

<JAVASCRIPT高级程序设计>第三章主要讲述了这门语言的基础概念,内容多而浅,通过思维导图可以帮助我们很好的理清脉络. js函数使用function关键字来声明,以下是一个简单的例子: 1 function sayHi(name, message){ 2 alert("hello," +name + message); 3 } 函数中可以使用return语句指定返回值,如果只有“return;”,则函数在停止执行后,将返回undefined; 定义的函数有2个参数,那

javascript高级程序设计 第十四章--表单脚本

javascript高级程序设计 第十四章--表单脚本 在HTML中表单由<form>元素表示,在js中表单对应的是HTMLFormElement类型,这个类型也有很多属性和方法:取得表单元素的引用还是为它添加id特性,用DOM操作来获取表单元素:提交表单:把<input>或<button>元素的type特性设置为"submit",图像按钮把<input>元素的type特性设置为"image",也可以调用submit(

《javascript高级程序设计》第六章总结

6.1 理解对象 属性类型 属性特性 行为描述 数据属性 Configurable 表示是否能通过delete删除属性从而重新定义属性. 数据属性 Enumerable 表示能否通过for-in循环返回属性.对于直接在对象中定义的属性,默认为true 数据属性 Writable 表示是否可以修改属性的值. 数据属性 value 表示这个属性的内部值. 访问器属性 Configurable 表示是否能通过delete删除属性从而重新定义属性. 访问器属性 Enumerable 表示能否通过for-

《javascript高级程序设计》第五章知识点总结

第五章知识点总结 1.object类型 访问对象的方法:①点表示法        (people.name) :      ②方括号表示法         (people[name]). 常用方法:hasOwnProperty()         用于检查给定属性在当前对象实例中是否存在 isPrototypeOf()              用于检测传入的对象是否传入对象原型 toString()                        返回对象的字符串表示 valueOf()    

《javascript高级程序设计》第十三章知识点

第十三章知识点总结 1.事件流: ①事件冒泡:事件开始时由最具体的事件接受,逐级向上传播到较为不具体的节点. ②事件捕获:不太具体的节点更早的接受事件,最具体的节点应该最后接到事件. 事件流包括三个阶段:事件捕获阶段.处于目标阶段.事件冒泡阶段. 2.事件处理程序 3.事件对象 IE 属性 除了上面的鼠标/事件属性,IE 浏览器还支持下面的属性: 属性 描述 cancelBubble 如果事件句柄想阻止事件传播到包容对象,必须把该属性设为 true. fromElement 对于 mouseov

javascript 高级程序设计 学习笔记01章 javascript的认知

hello world: 大家早上好 ,所谓一年之计在于春,一日之计在于晨.今天开始学习 高级程序设计第三版 第二遍 以前以迅雷不及掩耳之势草草看过一遍 ,但是什么也没记住 已经忘得差不多了.哈哈,原来我不是黄蓉,也不是天才,还是那句话 好记性不如烂笔头.这次学习高级程序设计第三版 是有目标的,有目的性的.所以我会把 每一章学习的心得和笔记 都记录在此.于己于人都方便.废话不多说 ,开始吧 今天的第一张 ,javascript 的实现.张鑫旭大神说过 非it(计算机专业的)的前端从业人员 学习j

《JAVASCRIPT高级程序设计》第五章(1)

引用类型是一种将数据和功能组合到一起的数据结构,它与类相似,但是是不同的概念:ECMAScript虽然是一门面向对象的语言,但它不具备传统的面向对象语言所支持的类和结构等基本结构.引用类型也被称为“对象定义”. 一.Object类型 创建实例方式: 1使用new操作符+构造函数 1 var person = new Object(); 2 person.name = "Lillian"; 3 person.age = 29; 2使用对象字面量表示法 2.1属性不加引号 1 var pe

《JavaScript高级程序设计》第六章【面向对象的程序设计】 包括对象、创建对象、继承

一.理解对象 ECMAScript中有两种属性:数据属性和访问器属性. 二.创建对象 1. 工厂模式 使用简单的函数创建对象,为对象添加属性和方法,然后返回对象.这种方法后来被构造函数模式所取代. 2. 构造函数模式 可以创建自定义引用类型,可以像创建内置对象实例一样使用new操作符.但是它的每个成员都无法得到复用,包括函数. 但是这样说好像也不准确——如果是通过一个指针指向构造函数外部的函数的话,应该算是复用? 1 function Person(name,age){ 2 this.name

再看《JavaScript高级程序设计》第13、14、17、20-25章

第十三章 事件 1.事件流:描述的是从页面中接收事件的顺序 1)事件冒泡:事件开始时由最具体的元素接收,然后逐级向上传播到较为不具体的节点 2)事件捕获:事件开始时由不太具体的节点接收,然后逐级向下传播到最具体的元素 3)DOM事件流:经历三个阶段——事件捕获阶段.处于目标阶段和事件冒泡阶段 2.事件处理程序:事件是用户或浏览器自身执行的某种动作,响应某个事件的函数就是事件处理程序 1)HTML事件处理程序:将事件处理程序设置为 null 就可以删除该事件处理程序. 2)DOM0级事件处理程序: