见:https://blog.csdn.net/JBY2020/article/details/109864650
https://blog.csdn.net/JBY2020/article/details/110148757
文档链接:https://pan.baidu.com/s/1SWN_X7Irg3k29dnKFoYalA
提取码:jbb0
目录
DOM
DOM(Document Object Model)文档对象模型,可以以一种独立于平台和语言的方式访问和修改一个文档的内容和结构(是表示和处理一个HTML或XML文档的常用方法)。DOM的设计是以对象管理组织(OMG)的规约为基础的,因此可以用于任何编程语言。
DOM节点的属性和方法
以下假设nodeObj是某个节点对象:
节点的属性
- nodeObj.nodeName :nodeObj 的名称
- nodeObj.nodeValue: nodeObj 的值
- nodeObj.nodeType:nodeObj 的节点类型
- nodeObj.parentNode: nodeObj 的父节点
- nodeObj.childNodes: nodeObj 的子节点
- nodeObj.attributes :nodeObj 的属性节点
节点的方法
- nodeObj.getElementsByTagName(name) - 获取节点的后代中带有指定标签名称的所有元素
- nodeObj.appendChild(node) - 向 nodeObj 插入子节点
- nodeObj.removeChild(node) - 从 nodeObj 删除子节点
nodeName属性
- 元素节点的nodeName是标签名称
- 属性节点的nodeName是属性名称
- 文本节点的nodeName永远是#text
- 文档节点的nodeName永远是#document
nodeValue属性
- 对于文本节点,nodeValue属性包含文本。
- 对于属性节点,nodeValue属性包含属性值。
- nodeValue属性对于文档节点和元素节点是不可用的。
操作DOM节点对象
访问DOM节点可以通过以下种方法:
- 通过使用 getElementsByTagName() 方法
- 通过利用节点的关系在节点树中导航
- 通过使用 getElementsByName() 方法
- 通过使用 getElementById() 方法
HTML DOM
HTML DOM事实上是标准DOM的一种实现,在标准DOM中,认为一切HTML元素都是节点对象,即可以理解为:
- HTML对象是Node对象的后代对象。
- 每一个HTML元素都有一个DOM对象原型,比如:<div>,其DOM对象原型是HTMLDivElement;<p>,其DOM对象原型是HTMLParagraphElement。
- 所有HTML对象的公共原型是HTMLElement,而HTMLElement的原型是Element, Element的原型是Node。
HTML DOM中的主要内容包括HTMLElement、Style对象、Event对象、表单对象等。
HTMLElement 对象
在DOM标准中,每个HTML元素都是继承自HTMLElement。即每个HTML元素对象都继承了HTMLElement的属性和方法。 HTMLElement常用属性:
获取HTML元素的尺寸
IE新开页面屏幕计算默认值:
FF与IE都支持(计算有差异)网页可见区域宽【document.body.clientWidth】:1239
FF与IE都支持(计算有差异)网页可见区域高【document.body.clientHeight】:0
FF与IE都支持(计算有差异)网页可见区域宽【document.body.offsetWidth】:1239
FF与IE都支持(计算有差异)网页可见区域高【document.body.offsetHeight】:0
FF与IE都支持(计算有差异)网页正文全文宽【document.body.scrollWidth】:1239
FF与IE都支持(计算有差异)网页正文全文高【document.body.scrollHeight】:0
FF与IE都支持(计算相同)网页被卷去的高【document.body.scrollTop】:0
FF与IE都支持(计算相同)网页被卷去的宽【document.body.scrollLeft】:0
只支持IE:网页正文部分上【window.screenTop】:144
只支持IE:网页正文部分左【window.screenLeft】:0
FF与IE都支持(计算相同):屏幕分辨率的高【window.screen.height】:1024
FF与IE都支持(计算相同):屏幕分辨率的宽【window.screen.width】:1280
FF与IE都支持(计算相同):屏幕可用工作区高度【window.screen.availHeight】:990
FF与IE都支持(计算相同):屏幕可用工作区宽度【window.screen.availWidth】:1280
FF与IE都支持(计算有差异):窗体左【document.body.offsetLeft】与右【document.body.offsetTop】:10和15
FF与IE都支持(计算有差异):窗体高【document.body.offsetWidth】与宽【document.body.offsetHeight】:1239和0
垂直方向滚动的值【document.documentElement.scrollTop】:0
只支持FF浏览器整个宽高,不包括工具条【window.innerHeight】:undefined
FF与IE都支持(计算有差异)网页内容可视区域的高度【document.documentElement.clientHeight】:820
FF与IE都支持(计算相同):获取位于对象最顶端和窗口中可见内容的最顶端之间的距离【document.documentElement.scrollTop】:0FF新开页面屏幕计算默认值:
以下是新开页面屏幕计算默认值:
FF与IE都支持(计算有差异)网页可见区域宽【document.body.clientWidth】:1264
FF与IE都支持(计算有差异)网页可见区域高【document.body.clientHeight】:0
FF与IE都支持(计算有差异)网页可见区域宽【document.body.offsetWidth】:1264
FF与IE都支持(计算有差异)网页可见区域高【document.body.offsetHeight】:0
FF与IE都支持(计算有差异)网页正文全文宽【document.body.scrollWidth】:1264
FF与IE都支持(计算有差异)网页正文全文高【document.body.scrollHeight】:0
FF与IE都支持(计算相同)网页被卷去的高【document.body.scrollTop】:0
FF与IE都支持(计算相同)网页被卷去的宽【document.body.scrollLeft】:0
只支持IE:网页正文部分上【window.screenTop】:undefined
只支持IE:网页正文部分左【window.screenLeft】:undefined
FF与IE都支持(计算相同):屏幕分辨率的高【window.screen.height】:1024
FF与IE都支持(计算相同):屏幕分辨率的宽【window.screen.width】:1280
FF与IE都支持(计算相同):屏幕可用工作区高度【window.screen.availHeight】:990
FF与IE都支持(计算相同):屏幕可用工作区宽度【window.screen.availWidth】:1280
FF与IE都支持(计算有差异):窗体左【document.body.offsetLeft】与右【document.body.offsetTop】:0和0
FF与IE都支持(计算有差异):窗体高【document.body.offsetWidth】与宽【document.body.offsetHeight】:1264和0
垂直方向滚动的值【document.documentElement.scrollTop】:0
只支持FF浏览器整个宽高,不包括工具条【window.innerHeight】:829
FF与IE都支持(计算有差异)网页内容可视区域的高度【document.documentElement.clientHeight】:858
FF与IE都支持(计算相同):获取位于对象最顶端和窗口中可见内容的最顶端之间的距离【document.documentElement.scrollTop】:0以上数据表明:在FF与IE下,在计算屏幕宽度时,FF比IE多 25个像素.
对IE浏览器各属性的计算范围:
CSS样式
在Javascript中,我们可以通过HTML DOM中的Style对象操作HTML对象的“内联样式表”:
- Style对象只能获取或设置HTML对象的style属性中的CSS属性。
- 对于没有中划线的css属性一般直接使用style.属性名即可。如:obj.style.margin
- 对于含有中划线的css属性,将每个中划线去掉并将每个中划线后的第一个字符换成大写即可。如:obj.style.marginTop
- 浮动比较特殊,要使用obj.style. cssFloat
- 对于多值符合属性,不能直接访问属性值,要通过最终属性名
通过window.getComputedStyle(obj,null)获取Style对象:
- 如果已知对象的Id,这种方式可以获取该对象所有的CSS属性。
- 这种方式IE不支持,IE中需要用obj.currentStyle。
- 对于多值复合属性,这种方式获取不到属性值,要通过最终属性名。
- 在Firefox中,颜色获取到的值形式如rgb(255,0,0),而IE中则如#ff0000。
通过CSS的变化来制作特效是最常见的,JS操作CSS除了Style对象外,我们还可以通过以下两种方式:
- 对象的className。
- 给link一个Id,通过Id来操作外部样式表。网页换皮肤的原理也是来源于此。
Event事件对象
事件处理的4种方式
手工触发
用法:在HTML代码中用事件属性执行代码或函数
优点:使用直接、简单,哪个HTML标签要触发什么事件,则就在该HTML标签上加事件属性。
缺点:不能做到JS与HTML完全分离。
匿名函数
用法:在JS中获取要触发事件的HTML对象,给HTML对象的事件属性绑定一个匿名函数,作为事件的响应。
优点:可以做到JS与HTML完全分离
缺点:一个匿名函数只能绑定给一HTML对象的事件属性,事件响应函数不能重用
显示声明
用法:在JS中,通过function关键字显示声明函数,然后获取要触发事件的HTML对象,给HTML对象的事件属性绑定一个显示函数的函数名,作为事件的响应。
优点:可以做到JS与HTML完全分离,并且显示声明的函数可以重复使用
缺点:显示声明的函数与HTML对象的事件属性从代码上看,没有直观的联系。
事件监听函数
用法:通过HTML DOM 对象的addEventListener()方法,为该对象注册事件响应函数。
语法:target.addEventListener(type, listener, useCapture);
- target:文档节点、document、window 或 XMLHttpRequest。
- type:字符串,事件名称,不含"on",比如"click"、"mouseover"、"keydown"等。
- listener:实现了 EventListener 接口或者是 JavaScript 中的函数。
- useCapture:是否使用捕捉,看了后面的“事件流”就明白了,一般用 false。
优点:
- 可以对同一物件的同一事件绑定多个事件处理程序。
- 可以通过事件流三个阶段更好地控制何时触发事件处理程序。
- 工作于 DOM 元素,而不仅是 HTML 元素。
缺点:
- addEventListener()方法存在兼容性问题,在IE中要使用attachEvent()方法,其语法为:target. attachEvent(type, listener);
事件流
当一个事件发生时,分为三个阶段:
- 捕获阶段:从根节点开始顺序而下,检测每个节点是否注册了事件处理程序。如果注册了事件处理程序,并且 useCapture 为 true,则调用该事件处理程序。(IE 中无此阶段。)
- 目标阶段:触发在目标对象本身注册的事件处理程序,也称正常事件派发阶段。
- 冒泡阶段:从目标节点到根节点,检测每个节点是否注册了事件处理程序,如果注册了事件处理程序,并且 useCapture 为 false,则调用该事件处理程序。
事件流的发送顺序规律:
- true 的触发顺序总是在 false 之前;
- 如果多个均为 true,则外层的触发先于内层;
- 如果多个均为 false,则内层的触发先于外层。
停止事件流传播:
- 当一个操作发生后,我们往往只需要一个响应就足够了,这个时候,我们需要停止事件流的传播。
- event.stopPropagation()用于停止事件流传播。(IE中使用event.cancelBubble = true )其中event指事件对象。
Event对象
Event 对象代表事件的状态,Event对象在Firefox和IE中不同:
- 在标准事件模型中,Event 对象传递给事件句柄函数;但是在 IE 事件模型中,它被存储在 Window 对象的 event 属性中。
- 在标准事件模型中,Event 的各种子接口定义了额外的属性,它们提供了和特定事件类型相关的细节。在 IE 事件模型中,只有一种类型的 Event 对象,它用于所有类型的事件。
Event对象的常用属性:可以分成四大类:
- 通用属性:type , relatedTarget
- 键盘、鼠标键值属性:keyCode,charCode,which,button
- 功能键属性:ctrlKey,metaKey, shiftKey,altKey
- 鼠标坐标属性:clientX,clientY,offsetX,offsetY, screenX, screenY,x,y
事件类型
Javascript事件大致可以分成五大类:
页面事件
鼠标事件
键盘事件
表单事件
编辑事件
HTML DOM的表单相关对象包括以下对象:
- Form
- Input Button
- Input Checkbox
- Input File
- Input Hidden
- Input Password
- Input Radio
- Input Reset
- Input Submit
- Input Text
- Option
- Select