DOM
Node类型
每个节点都有一个nodeType
属性,表示该节点的类型。节点类型由定义在Node类型上12个数值常量表示:
- 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.NOTATION_NODE(12)
对元素而言nodeName
始终等于元素的标签名,nodeValue
始终为null
节点关系
每个节点都有一个childNodes
属性,其中包含一个NodeList类数组的实例。反映当前DOM的结构。
可以使用
Array.prototype.slice.call(someNode.childNodes,0)
转换为数组。
使用ES6的Array.from(someNode.childNodes)
有同样的效果。
每个节点都有一个parentNode属性,指向其DOM树中的父元素。
而使用previousSibling
和nextSibling
可以在这个列表的同胞节点间导航。
firstChild
和lastChild
分别指向childNodes中的第一个和最后一个子节点。
操纵节点
appendChild()
在列表末尾添加节点,如果把文档中已经存在的节点传给appendChild()
,则这个节点会从之前的位置被转移到新位置。
在列表的特定位置插入节点,insertBefore()
方法,方法接收两个参数:要插入的节点和参照节点。调用之后在参照节点之前插入节点。
replaceChild()
,替换列表中的节点,被替换的节点会从文档树中完全移除。
cloneNode()
会返回与调用它的节点一摸一样的节点,接收一个布尔值参数,表示是否深复制。深复制复制节点及其整个子DOM树。false
则只会复制调用该方法的节点。复制返回的节点属于文档所有,但尚未指定父节点。
Document类型
在浏览器中document
是HTMLDocument
的实例,表示整个HTML页面。document
是window
对象的属性。
documentElement
属性始终指向HTML页面中的<html>
元素。
body
属性直接指向<body>
元素。
文档信息
title
属性,包含<title>
元素中的文本。修改title属性并不会改变<title>
元素。
URL
属性包含当前页面的完整URL(地址栏中的URL)。
domain
包含页面的域名。
referrer
包含链接到当前页面的那个页面的URL。
特殊集合
document.anchors
包含文档中所有带name属性的<a>
元素。
document.forms
包含文档中所有<form>
元素
document.images
包含文档中所有<img>
元素
document.links
包含文档中所有带href
属性的<a>
元素
文档写入
document
对象有向网页输出流中写入内容的能力。
对应四个方法:write()
、writeln()
、open()
和close()
。
write()
和writeln()
方法都接收一个字符串参数,可以将整个字符串写入网页中。
Write()
简单地写入文本,而writeln()
还会在字符串末尾追加一个换行符。
Element类型
表示XML或HTML元素,对外暴露出访问元素标签名、子节点和属性的能力。
可以通过nodeName
或tagName
属性来获取元素的标签名。
HTML元素
取得属性
每个元素都有零个或多个属性,通常用于为元素或其内容附加更多信息。
getAttribute()
获取属性,传入的属性名与它们实际的属性名一样。
通过DOM对象访问的属性中有两个返回的值跟使用getAttribute()
取得的值不一样。
首先是style
属性,在使用getAttribute()
访问style
属性时,返回的是CSS字符串。而通过DOM对象的属性访问时,style
属性返回的是一个(CSSStyleDeclaration)对象。
第二个属性其实是一类,即事件处理程序(或者事件属性),比如onclick
。在元素上使用事件属性时,属性的值是一段JavaScript代码。如果使用getAttribute()
访问事件属性,则返回的是字符串形式的源代码。而通过DOM对象的属性访问事件属性时返回的则是一个JavaScript函数。
设置属性
setAttribute()
,接收两个参数,要设置的属性名和属性的值。
attributes属性
Element类型时唯一使用attributes
属性的DOM节点类型。attributes
属性包含一个NamedNodeMap实例,是一个类似NodeList的实时集合。元素的每个属性都表示为一个Attr节点,并保存在这个NamedNodeMap对象中。
创建元素
document.createElemnet()
Text类型
由Text类型表示,包含按字面解释的纯文本,也可能包含转义后的HTML字符,但不含HTML代码。
Text节点中包含的文本可以通过nodeValue
属性访问,也可以通过data
属性访问。
创建文本节点
Document.createTextNode()
,可以用来创建新文本节点,它接收一个参数,即要插入节点的文本。跟设置已有文本节点的值一样,这些要插入的文本也会应用HTML或XML编码。
规范化文本节点
在包含两个或多个相邻文本节点的父节点上调用normalize()
时,所有同胞文本节点会被合并为一个文本节点,
拆分文本节点
splitText()
这个方法可以在指定的偏移位置拆分nodeValue
,将一个文本节点拆分成两个文本节点。
Comment类型
其与Text类型继承同一个基类(CharacterData),因此拥有除splitText()
之外Text
节点所有的字符串操作方法。
可以使用document.createComment()
方法创建注释节点。
- 本文链接:https://archer-lan.github.io/2023/11/20/JS-DOM/
- 版权声明:本博客所有文章除特别声明外,均默认采用 许可协议。