DOM

作者: kiterumer | 来源:发表于2019-04-09 22:42 被阅读0次

DOM 是 JavaScript 操作网页的接口,全称为“文档对象模型”(Document Object Model)。
浏览器会根据 DOM 模型,将结构化文档(比如 HTML 和 XML)解析成一系列的节点,再由这些节点组成一个树状结构(DOM Tree)。所有的节点和最终的树状结构,都有规范的对外接口。

节点

DOM 的最小组成单位叫做节点(node)。
节点的类型有七种。

  • Document:整个文档树的顶层节点 9
  • Element:网页的各种HTML标签(比如<body>、<a>等) 1
  • Text:标签之间或标签包含的文本 3
  • Attribute:网页元素的属性(比如class="right")2
  • DocumentType:doctype标签(比如<!DOCTYPE html>)10
  • Comment:注释 8
  • DocumentFragment:文档的片段(性能优化,面试考点) 11

Node接口

所有DOM节点对象都继承了Node接口,拥有一些共同的属性和方法。这是DOM操作的基础。

Node.prototype.childNodes

注意,除了元素节点,childNodes属性的返回值还包括文本节点和注释节点。如果当前节点不包括任何子节点,则返回一个空的NodeList集合。由于NodeList对象是一个动态集合,一旦子节点发生变化,立刻会反映在返回结果之中。
回车属于文本节点。

Node.prototype.textContent

textContent属性返回当前节点和它的所有后代节点的文本内容。
该属性是可读写的,设置该属性的值,会用一个新的文本节点,替换所有原来的子节点。它还有一个好处,就是自动对 HTML 标签转义。这很适合用于用户提供的内容。

innerText和textContent有什么区别?

  • textContent 会获取所有元素的内容,包括 <script> 和 <style> 元素,然而 innerText 不会。
  • innerText 受 CSS 样式的影响,并且不会返回隐藏元素的文本,而textContent会。
  • 由于 innerText 受 CSS 样式的影响,它会触发重排(reflow),但textContent 不会。

NodeList接口,HTMLCollection接口

两者主要区别,NodeList可以包含各种类型的节点,HTMLCollection只能包含HTML元素节点。

NodeList接口

通过以下方法可以得到NodeList实例。

  • Node.childNodes
  • document.querySelectorAll()等节点搜索方法

NodeList实例很像数组,可以使用length属性和forEach方法。但是,它不是数组,不能使用pop或push之类数组特有的方法。
如果NodeList实例要使用数组方法,可以将其转为真正的数组。

var children = document.body.childNodes
vat nodeArray = Array.prototype.slice.call(children)

注意,NodeList 实例可能是动态集合,也可能是静态集合。所谓动态集合就是一个活的集合,DOM 删除或新增一个相关节点,都会立刻反映在 NodeList 实例。目前,只有Node.childNodes返回的是一个动态集合,其他的 NodeList 都是静态集合。
querySelectAll返回的虽然是NodeList集合,但实际上是元素集合,并且是静态的。

HTMLCollection接口

HTMLCollection是一个节点对象的集合,只能包含元素节点(element),不能包含其他类型的节点。它的返回值是一个类似数组的对象,但是与NodeList接口不同,HTMLCollection没有forEach方法,只能使用for循环遍历。
返回HTMLCollection实例的,主要是一些Document对象的集合属性,比如document.links、document.forms、document.images等。
HTMLCollection实例都是动态集合,节点的变化会实时反映在集合中。

document.referrer

document.referrer属性返回一个字符串,表示当前文档的访问者来自哪里。

document.referrer
// "https://example.com/path"

如果无法获取来源,或者用户直接键入网址而不是从其他网页点击进入,document.referrer返回一个空字符串。

document.referrer的值,总是与 HTTP 头信息的Referer字段保持一致。
但是,document.referrer的拼写有两个r,而头信息的Referer字段只有一个r。

相关文章

  • dom 级别和dom 事件处理

    dom级别:dom0 dom1 dom2 dom3 dom事件处理:dom0 dom2 dom3 (1级DOM标准...

  • WY-DOM编程

    DOM Document Object Model DOM Core DOM HTML DOM Style DOM...

  • DOM事件

    DOM级别与DOM事件 DOM级别:DOM0级、DOM1级、DOM2级、DOM3级DOM事件:DOM0级事件处理、...

  • DOM事件

    DOM级别与DOM事件 DOM级别:DOM0级,DOM1级,DOM2级和DOM3级DOM事件:DOM0级事件处理,...

  • js红包雨活动

    function Block( dom ){ this.dom = dom; //dom this.parentW...

  • DOM操作的分类

    DOM操作分为三个方面,即DOM Core(核心)、HTML-DOM和CSS-DOM。 DOM Core DOM ...

  • 虚拟 DOM 和 diff 算法

    虚拟 DOM(Virtual DOM) 通过 JS 对象表示 DOM 结构,虚拟DOM 是对 DOM 的抽象 通常...

  • jQuery——DOM

    DOM操作分类 一般来说,DOM操作分为3个方面,即DOM Core、HTML-DOM、CSS-DOM。 DOM ...

  • JavaScript高级程序设计前四章

    1. DOM级别 1.1 DOM1级 由DOM核心(DOM Core)和DOM HTML两个模块组成。 DOM核心...

  • DOM分级详解

    DOM1 级(DOM Level 1) DOM1 级由两个模块组成:DOM核心(DOM Core)和DOM HTM...

网友评论

      本文标题:DOM

      本文链接:https://www.haomeiwen.com/subject/rlswiqtx.html