JS中DOM重点基础知识实验(全)

文档:一个页面就是一个文档。

元素:页面中所有的标签都是元素,也可以叫对象。

节点:页面中所有的内容都是节点,标签,属性,文本。

 

 

在JS中操作dom,设置css样式时,样式的名称如background-color,在js中一律用驼峰写法,backgroundColor

 

通过JS设置元素行内样式,操作style属性即可

JS中DOM重点基础知识实验(全)

 

JS中DOM重点基础知识实验(全)

 

通过JS设置元素的类样式,不用class关键字,应使用className

JS中DOM重点基础知识实验(全)   

JS中DOM重点基础知识实验(全)

JS中DOM重点基础知识实验(全)

 

 

a 标签点击事件有默认的跳转,想要阻止默认的跳转,在点击事件函数的最后return false;

JS中DOM重点基础知识实验(全)

 

 

若点击事件函数中有多条语句执行,封装成函数的形式,应将函数返回,才能阻止a的默认跳转。

JS中DOM重点基础知识实验(全)

JS中DOM重点基础知识实验(全)

 

 

 

JS中的事件:onclick,onmouseover,onmouseout,onfocus,onblur等等。

 

原生JS选择器:

document.getElementById(),

document.getElementsByClassName(),

document.getElementsByTagName().

document.getElementsByName()

 

H5选择器:

document.querySelector(),

document.querySelectorAll()

 

 

TextContent与innerText

 

IE8不支持:textContent

JS中DOM重点基础知识实验(全)

 

 

InnerText和innerHTML

 

InnerText设置:按纯文本的方式解析内容,innerHTML设置:按html的方式解析内容

InnerText获取:不仅能获得当前元素的内容,还能获取子元素中的文本内容。

InnerHTML获取:同样能获取到子元素,但包含了子元素的标签

JS中DOM重点基础知识实验(全)

JS中DOM重点基础知识实验(全)

结果:

JS中DOM重点基础知识实验(全)

 

获取/设置/删除自定义(自带属性)属性:getAttribute()/setAttribute()/removeAttibute()

JS中DOM重点基础知识实验(全)

 

JS中DOM重点基础知识实验(全)

JS中DOM重点基础知识实验(全)

Tab的实现,

JS中DOM重点基础知识实验(全)

JS中DOM重点基础知识实验(全)

JS中DOM重点基础知识实验(全)

节点分为:标签节点,属性节点,文本节点

节点的属性:

nodeType:取值(1,2,3)

1代表标签,2代表标签的属性,3代表文本内容

nodeName:标签节点的nodeName是大写的标签名字,属性节点的nodeName是小写的属性名字,文本节点的nodeName是#text

nodeValue:标签节点的的nodeValue是null,属性节点的nodeValue是属性值,文本节点的nodeValue是文本内容

 

 

获取标签的父节点/父元素?

parentNode/parentElement

JS中DOM重点基础知识实验(全)

JS中DOM重点基础知识实验(全)

JS中DOM重点基础知识实验(全)

-------------------------------------------------------

JS中DOM重点基础知识实验(全)

JS中DOM重点基础知识实验(全)

 

获取子节点/子元素

ChildNodes/children

JS中DOM重点基础知识实验(全)

 

JS中DOM重点基础知识实验(全)

Nodelist中有9个节点的原因在于文本是节点,空白文本也是节点,一般可以认为:

子节点的个数 = 子元素的个数 * 2 +1(9 = 4*2+1)

 

如何获取属性属性节点?

GetAttributeNode()

JS中DOM重点基础知识实验(全)

JS中DOM重点基础知识实验(全)

JS中DOM重点基础知识实验(全)

对应div中id这个属性节点来说,它的nodeType=2,nodeName=属性id,nodeValue属性值box4,基本上用不上。了解即可。

 

 

从这里开始的代码,在IE8中存在问题,以下代码是运行再chrome浏览器中的效果。

获取第一个子节点/第一个子元素

FirstChild/firstElementChild

在IE8中(FirstChild代表着第一个子元素,firstElementChild无法识别undefined)

JS中DOM重点基础知识实验(全)

JS中DOM重点基础知识实验(全)

--------------------------------------------------

同理,获取最后一个子节点/最后一个子元素

LastChild/lastElementChild

在IE8中(lastChild代表着最后一个子元素,lastElementChild无法识别undefined)

JS中DOM重点基础知识实验(全)

JS中DOM重点基础知识实验(全)

---------------------------------

获取某个元素的前一个兄弟节点/前一个兄弟元素

PreviousSibling/previousElementSibling

在IE8中(PreviousSibling代表前一个兄弟元素,previousElementSibling无法识别undefined)

JS中DOM重点基础知识实验(全)

JS中DOM重点基础知识实验(全)

--------------------------------------

同理,获取某个元素的后一个兄弟节点/后一个兄弟元素

NextSibling/nextElementSibling

在IE8中(NextSibling代表着后一个兄弟元素,nextElementSibling无法识别undefined)

JS中DOM重点基础知识实验(全)

 

JS中DOM重点基础知识实验(全)

 

封装节点操作的兼容代码

获取任意元素的第一个子元素

JS中DOM重点基础知识实验(全)

 

 

同理获取任意元素的最后一个子元素

 

JS中DOM重点基础知识实验(全)

 

 

 

创建元素的方式

  1. document.write(标签以及内容)
  2. 元素对象.innerHTML = ‘标签以及内容’
  3. Document.createElement(“标签的名称’);

 

 

Document.write(()在页面加载完成时,向body中写入内容,会将body,head中的所有内容清空后,插入当前内容。

JS中DOM重点基础知识实验(全)

当事件触发时执行document.write(),意味着页面加载完成,当点击按钮时,页面中其他内容都会被清空。

JS中DOM重点基础知识实验(全)

 

-------------------------------------

使用innerHTML向标签内添加内容,同样会覆盖当前标签的内容,如果反复点击按钮添加元素,会导致反复的赋值,也就是反复的覆盖之前插入的同样内容的标签

JS中DOM重点基础知识实验(全)

点击按钮前

JS中DOM重点基础知识实验(全)

 

点击按钮后

JS中DOM重点基础知识实验(全)

 

 

-------------------------------

Document.createElment()创建元素,通过点击按钮会,反复的创建元素对象,然后通过appendChild()向后追加,插入到目标容器中。

JS中DOM重点基础知识实验(全)

点击按钮前:

JS中DOM重点基础知识实验(全)

点击按钮后:

JS中DOM重点基础知识实验(全)

反复点击:

JS中DOM重点基础知识实验(全)

应该避免反复点击,创建预期之外的元素。

另外循环中不要写匿名函数,这样效率会很低。

 

将标签追加到目标容器中的方法

AppendChild():向后追加

InsertBefore(a,b) 把a插入到b的前面

JS中DOM重点基础知识实验(全)

首先是要插入到$$(‘box’)标签对象的内的,但具体在位置,由后面两个参数确定,

Pobj是创建的p元素,p元素插入到$$(‘box4’)标签对象的第一个子元素前面。

 

点击按钮前:

JS中DOM重点基础知识实验(全)

点击按钮后:

JS中DOM重点基础知识实验(全)

 

 

移除当前元素中的子元素

A.RemoveChild(B),含义中:从A中删除子元素B

 

 

如何控制无论按钮点击多少次,都只创建一次呢?

有则删除,无则创建!

JS中DOM重点基础知识实验(全)

第一次点击按钮的时候,元素创建并且插入了,第二次的时候,通过id可以找到之前插入的元素,那么就删除,然后再创建,插入,以此类推。着从页面上看,无论按钮点击多少次,都只会有一个元素。

 

 

 

事件的绑定:当为同一个元素多次绑定同一事件,则最后一次事件绑定生效。

JS中DOM重点基础知识实验(全)

结果:JS中DOM重点基础知识实验(全)

那么如何让绑定的onclick事件都生效呢?

 

其实,还有其他绑定事件的方式:addEventListener()

参数1:事件名称,没有on,点击事件就是click

参数2:回调函数

参数3:布尔类型,

JS中DOM重点基础知识实验(全)

结果:JS中DOM重点基础知识实验(全)

通过这种方法,为同一事件绑定,每次绑定的事件都会触发,不会被覆盖,但是兼容性存在问题。(IE8不支持。)

 

为了解决IE8兼容性的问题,使用AttachEvent()

参数1:事件的类型,如点击事件,onclick

参数2:回调函数(可以是命名函数)

JS中DOM重点基础知识实验(全)

封装兼容性事件函数:为任意元素,绑定任意事件

JS中DOM重点基础知识实验(全)

-----------------------------------------------------------

JS中DOM重点基础知识实验(全)

在chrome下,addEventListener兼容,this的值是绑定事件的dom对象

-------------------------------------------------------------

JS中DOM重点基础知识实验(全)

在IE8下,attacheEvent兼容,this的值是window

 

 

为元素解除事件绑定

JS中DOM重点基础知识实验(全)

当使用onclick 绑定事件时,清除事件只要将onclick指向null。

--------------------------------------------------------------------------------

JS中DOM重点基础知识实验(全)

当使用addEventListener为元素添加多个相同事件,应该命名函数作为事件处理函数,便与在使用removeEventListener移除事件,方便移除具体的事件处理函数。

----------------------------------------------------------------------

 

同理,IE8下添加事件和解绑事件

JS中DOM重点基础知识实验(全)

 

封装对应的解绑事件的函数

JS中DOM重点基础知识实验(全)

 

 

 

事件冒泡

多个元素嵌套,由层级关系,绑定了相同的事件类型,当内部的元素出发事件,外面的元素也会出发事件。

 

JS中DOM重点基础知识实验(全)

JS中DOM重点基础知识实验(全)

JS中DOM重点基础知识实验(全)

 

当点击box1时:JS中DOM重点基础知识实验(全)

当点击box2时:JS中DOM重点基础知识实验(全)

当点击box3时:JS中DOM重点基础知识实验(全)

如果都绑定了相同的事件,但是它们的事件处理函数可以完全不通,不能因为触发子元素事件的同时,由于事件冒泡,也触发到外层元素的事件。你可能只想干一件事,可是,由于事件冒泡却多做了几件事,这样反倒会画蛇添足。

 

如何阻止事件冒泡?

Window.event.cancelBubble = true,火狐浏览器不支持。Window.event是ie中标准事件对象

e.stopPropagation()   IE8不支持这个函数,且IE8中没有事件处理的默认参数,在其他浏览器中是有e这个事件处理的默认参数的。E是火狐的标准事件对象

JS中DOM重点基础知识实验(全)

Box1点击时:JS中DOM重点基础知识实验(全)

Box2点击时:JS中DOM重点基础知识实验(全)

Box3点击时:JS中DOM重点基础知识实验(全)

 

事件有三个阶段:事件捕获阶段,事件目标阶段,事件冒泡阶段

对于addEventListener()的第三个参数而言,在值是false情况下,事件处理函数的触发按照事件冒泡来触发,而在值等于true的情况下,事件处理函数的触发按照事件捕获阶段触发,事件捕获与事件冒泡过程相反。事件冒泡是从内向外触发事件函数,而事件捕获是从外向内触发事件函数。即addEventListener()的第三个参数是控制事件阶段(控制触发函数的过程)

一般绑定事件,默认都是设置成事件冒泡阶段,很少设置成捕获阶段。

 

---------------------------------------------------

Bom

 

浏览器中的顶级对象是window

页面中的顶级对象是document

在全局环境下,也就是js的文件中,用var定义的变量,默认是挂在window对象上的

 

JS中DOM重点基础知识实验(全)

JS中DOM重点基础知识实验(全)

 

----------------------------------------------------------------

页面加载事件

Window.onload :当页面上所有的标签,属性,文本,外部引用加载完成时,才会触发。

在IE8中:

Window.onunload 页面关闭后触发事件

Window.onbeforeunload 页面关闭前触发函数

 

 

Location对象

Location.href = ‘’ 跳转到指定的网页

Location.assign() 挑战到指定的网页

Location.reload() 重新加载页面,相当于刷新

Location.replace() 跳转到新的页面,不能回到初始页面

 

 

History 对象

History.back()

History.forward()

History.go()

 

Navigator对象

UserAgent  通过userAgent可以判断浏览器类型

Platform    通过platform可以判断浏览器所在的系统平台

JS中DOM重点基础知识实验(全)

JS中DOM重点基础知识实验(全)

 

------------------------------------------------------------------

 

定时器、

Id = Window.setInterval() :设置一个定时器。

Window.clearInterval(id) 清除定时器。

JS中DOM重点基础知识实验(全)

点击按钮前,每秒钟获取当前的时间

JS中DOM重点基础知识实验(全)

点击按钮后:停止。

----------------------------------------------------

 

SetTimeout() :设置一次性的定时器

clearTimeout():清除定时器所占用的内存空间

JS中DOM重点基础知识实验(全)

1秒中之后,获取当前时间,输出。只执行一次。即使只执行一次,也需要清理所占用的内存空间。