JS与DOM

DOM节点

DOM可以将任何HTML或XML文档描绘成一个由多层节点构成的结构。

文档节点是每个文档的根节点,在HTML中,文档节点只有一个子节点,即<html>元素,称之为文档元素,文档中的其他所有元素都包含在文档元素之中并且每个文档只能有一个文档元素。

文档中的每一个标记都可以通过树中的一个节点来表示,HTML元素通过元素节点表示,属性(Attributes)通过属性节点来表示,文档类型通过文档类型节点来表示,注释通过注释节点来表示,等等。一共有12个节点类型,而这些类型都继承自一个基类型Node。

Node类型

在DOM1级中定义了一个Node接口,这个接口在JavaScript中是作为Node类型来实现的。JavaScript中的所有节点都继承自Node类型,因此所有节点类型都共享着相同的基本属性和方法。

每个节点都有一个用于表明节点类型的nodeType属性,该属性的值主要由12个常数来表示,一一对应12个Node类型。

  • Node.ELEMENT_NODE:1
  • Node.ATTRIBUTE_NODE:2
  • Node.TEXT_NODE:3
  • Node.CDATA_SECTION_NODE:4
  • Node.ENTITY_REFERENCE_NODE:5
  • Node.ENTITY_NODE:6
  • Node.PROCESSING_INSTRUCTION_NODE:7
  • Node.COMMENT_NODE:8
  • Node.DOCUMENT_NODE:9
  • Node.DOCUMENT_TYPE_NODE:10
  • Node.DOCUMENT_FRAGMENT_NODE:11
  • Node.NATATION_NODE:12

节点关系

节点与节点之间的关系可以用一棵树来形容。例如<body>元素就是<html>的子元素,而<head>元素就是<body>元素的兄弟元素。

每个节点都有一个childNodes属性,这个属性指向一个NodeList对象。NodeList对象。是一个类数组对象,可以通过方括号加索引值访问内部元素,也具有length属性。

NodeList对象的特殊之处在于它是一个基于DOM结构动态执行查询的结果,而不是某个时间点的快照,因此DOM结构的变化能够自动反映到NodeList对象。

此外,每个节点还都有一个parentNode属性,顾名思义,是指向该节点的父节点的。在同一个NodeList中的节点具有相同的parentNode属性。

在同一个NodeList中的节点之间都是兄弟节点,通过访问previouSiblingnextSibling属性,可以访问到该节点在NodeList中后一个或前一个节点。

父元素与其第一个和最后一个子元素也有一些联系,父元素可以通过firstChildlastChild分别访问父元素的第一个和最后一个子元素。

最后,所有元素都还拥有一个ownerDocument属性,该属性指向表示整个文档的文档节点。

操作节点

DOM提供了一些操作节点的方法,其中最常用的方法是appendChild(),用于向childNodes的末尾添加一个节点。

如果被传入到appendChild()的节点本身已经是文档的一部分了,那该操作的结果就是将该节点从原来的位置转移到新位置。

如果需要把节点放在某个特定的位置上,而不是放在末尾,那么可以使用insertBefore()方法,这个方法接受两个参数,分别是要插入的节点和作为参照的节点。

如果想要替换节点则可以使用replaceChild(),同样接受两个参数,要插入的节点和要被替换的节点。被替换之后的节点,理论上说它还在文档之中,但是在文档中已经没有了它的位置。

如果是想直接移除而非替换的话,可以使用removeChild()方法。

还有一个所有类型的节点都有的方法,cloneNode()。可以用于创建调用这个方法的节点的副本,这个方法接受一个布尔值参数,表示是否执行深拷贝,也就是复制节点和整个子节点树。复制返回的节点副本属于文档,但是并没有父节点,需要通过上面介绍的方法添加到文档之中。

Document类型

JavaScript通过Document类型表示文档,在浏览器中,document对象是HTMLDocument的一个实例,表示整个HTML页面。而且document对象是window对象的一个属性,因此可以将其作为全局对象来访问。

文档的子节点

document对象内置了几个访问子节点的快捷方式,首先就是documentElement属性,该属性始终指向<html>元素。

注:document的firstChild并不是<html>元素,而是<!doctype html><!doctype html>也可以通过document.doctype来访问

除此之外还有body属性指向<html>元素的<body>子元素。

文档信息

document对象还有一些代表网页信息的属性

首先就是title属性,这个不必多说。

然后还有三个与对网页请求有关的属性:

  • URL:页面完整的URL
  • domain:只包含页面的域名
  • referer:链接到当前页面的那个页面的URL,如果没有来源页面可能为空。

注:这三个属性里面只有domain是可以设置的。

查找元素

Document类型为查找对象定义了两个方法,getElementsByTagNamegetElementById

顾名思义,一个是通过标签名来查找,而另一个则是通过id来查找。

而通过标签名来查找会返回一个HTMLCollection对象,这个对象也是一个类数组对象,与前面介绍的NodeList非常相似。

HTMLCollection还有一个namedItem()的方法,通过它,可以在HTMLCollection中找到有相应name属性的项。

HTMLDocument类型还定义了一个getElementsByName的方法,这个方法会返回带有给定name属性的所有元素。

特殊集合

  • document.anchors:包含问答那个中所有带name属性的<a>元素
  • document.forms:包含文档中所有的<form>元素
  • document.images:包含文档中所有的元素
  • document.links:包含文档中所有带href特性的<a>元素。

Element类型

HTML元素

所有的HTML元素都由HTMLElement类型表示。HTMLElement类型直接继承自Element并添加了一些属性。

获取、设置、移除属性

操作属性的DOM方法主要是3个

  • getAttribute()
  • setAttribute()
  • removeAttribute()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值