美文网首页
DOM简述2

DOM简述2

作者: 聪聪的执著 | 来源:发表于2019-03-25 16:08 被阅读0次

总结 + 我认为的重点

  1. 搜索归纳,以掌握 DOM 基本思想

  2. DOM 的作用 === 表示 HTML 文档

  3. DOM提供的 API === 查询,修改 HTML 文档内容

  4. 输入document.documentElement来获得 html 节点

  5. 只有Node.querySelectorAll()返回的数组不是动态的

  6. scrollHeight返回的是高度

  7. scrollTop返回的是滚动高度

对 DOM 的一些理解

  1. DOM === 想象的树型结构模型.

  2. DOM提供的API的作用就是修改或者查看 HTML 代码

  3. DOM中的O指的是Object,他是在内存中,按照树型结构,通过构造函数(如Node,Element(翻译为标签比较好),Document三个构造函数),构造出对象,将 DOM 展现到内存中

  4. DOM的D指的是Document,可以认为是 HTML 文档

  5. DOM的M指的是Model,因为在 HTML结构 在内存中不好用笔表示,所以用一个模型来表示,这个模型就是树型结构

  6. DOM 树型结构

    未命名文件 (4).png
    1. 上图就是DOM,其中的每个节点(包括矩形节点和椭圆形节点)都是Node类型

    2. document节点是Document构造函数的一个实例对象,document节点代表了整个文档(整个树型结构

      ,我们可以通过直接输入document来获取document节点

    3. html节点是Element构造函数的一个实例对象,html节点又叫根节点

      我们可以通过输入document.documentElement来获得html节点

    4. 椭圆形的文本节点:"你好" 是Text构造函数的一个实例对象(文本节点是Text构造函数的一个实例对象)

    5. Node,Element,Text的关系

      未命名文件 (5).png

DOM的归纳和总结

  1. JavaScript将 HTML 文档渲染成 DOM 的树型结构.

  2. 有了树形结构, 第一件事情是什么?当然是获取DOM的节点啦!

  3. 获得节点的方法:

    1. 直接在DOM寻找: document.querySelector(AAAA)document.querySelectorAll(AAAA)
    2. 通过节点关系获得节点
      1. 兄弟关系
      2. 儿子关系
      3. 父关系
  4. 获得节点后,首先你要了解获得的节点是什么吧(比如你要知道节点是什么类型)?

    了解节点:

    1. Node.nodeName
    2. Node.nodeType
    3. Node.textContent
  5. 既然节点可以对应 HTML 文档的标签,那么我可不可以通过 DOM 来处理标签的属性?搜索处理标签属性知道所有属性的处理方法.

  6. 我可以通过 DOM 的 API 修改 DOM 的结构吗?

    1. 创建节点

      document.createElement("div")生成Element节点

      document.createTextNode("你好")生成Text节点

    2. 通过Node方法将创建的节点拼接到 DOM 中,搜索Node方法

Node类型的一些属性和方法

Node属性

  1. 节点本身某些特征的属性:
    • Node.nodeName:
      • 看着DOM,如果你不确定某个Node节点是什么类型(不确定某个Node节点是矩形还是椭圆形)
        • 返回节点类型,重要的返回的值有大写的HTML元素名, #text ,#document
    • Node.nodeType:
      • 根据Node类型返回某些数字
      • Element类型,返回的数字是1
      • Text类型,返回的数字是3
      • Document类型,返回的数字的9
    • Node.textContent
      • 返回的当前节点及其所有后代的文本内容
      • 值得注意的是,因为Node.textContent是Node属性,所以文本节点也是有textContent的
      • innerHTMLinnerText是Element的属性,所以TextNode.innerHTML返回的是undefined,注意,并不是返回null
  2. 节点结构关系属性
    • 兄弟关系
      • Node.nextSibling
      • Node.previousSibling
    • 儿子关系
      • Node.childNodes
      • Node.firstChild
      • Node.lastChild
    • 父关系
      • Node.parentNode
    • 上面的所有关系属性都可以获取到Text节点(除了父关系)
    • Node.childNodes是最特殊的,它返回的是一个伪数组,里面是Node节点,并且伪数组内的值是动态变化的

Node方法

  • Node.appendChild()

  • Node.hasChildNodes()

  • Node.cloneNode()

  • Node.insertBefore()

  • Node.removeChild()

  • Node.replaceChild()

  • Node.contains()

  • Node.isEqualNode()

  • Node.isSameNode()

  • Node.normalize()

document节点的一些属性和方法

document属性

  1. 用于指向其他节点(快捷获取某些特殊节点)的属性

    • document.documentElement指向 DOM 的 html节点
    • document.activeElement指向获得焦点的那个节点
  2. 返回文档特定元素的伪数组集合的属性

    • document.links
    • document.forms
    • document.images
    • document.embeds
    • 等等
  3. 返回文档信息的属性

    • document.location
    • document.readyState返回的是当前文档的状态,
    • 等等

document获取节点方法

  1. 方法:document.querySelector(AAAA)document.querySelectorAll(AAAA)

  2. 注意点:

    • 如果获取标签,那么直接AAAA === "div" 即可
    • 第一个返回的是第一个符合CSS选择器AAAA条件的节点
    • 第二个返回的是伪数组,里面包含了所有符合选择器的节点
    • 第二个返回的结果不是动态的,不会实时反映元素节点的变化
    • 这两个方法除了是 document ,还可以是某个 Node 节点
    • 其他查找方法不学,没有必要

document生成节点的方法

  1. document.createElement("div")生成Element节点
  2. document.createTextNode("你好,我叫饶家俊")生成Text节点

document事件相关的方法

待续

document写入方法

待续

Element节点的一些属性和方法

属性

  1. Element节点的属性处理

    搜索处理标签属性

  2. 盒模型相关属性

    1. 获得整个页面高度:document.documentElement.scrollHeight

    2. 获得整个浏览器视口的高度document.documentElement.clientHeight // 不包括滚动条

    3. 某个Element距离浏览器视口左上角的坐标

      • Element.getBoundingClientRect().left
      • Element.getBoundingClientRect().top
    4. 某个Element距离整个网页左上角的坐标(,注意和上一个区别)

      • Element.getBoundingClientRect().left + document.documentElement.scrollLeft
      • Element.getBoundingClientRect().top + document.documentElement.scrollTop
    5. 下面的可以不看了,等到遇到问题的时候再看

    6. 容器 === 浏览器的可视区域

    7. Node.clientHeight,Node.clientWidth

      • 某个 Element节点: 经过浏览器视口变化,返回节点所占据整个页面的高度和宽度(只有padding,margin和border不是)
      • html节点: 返回浏览器视口宽度和高度
    8. Node.clientTop,Node.clientLeft

      • 返回节点的左边框(border)和上边框(border)的边框宽度
    9. Noe.scrollHeight, Node.scrollWidth

      • 某个Element节点: 经过浏览器视口变化,返回节点所占据整个页面的高度和宽度(只有padding,margin和border不是)
      • html节点: 经过浏览器视口变化,返回整个页面的高度和宽度
    10. Node.scrollLeft, Node.scrollTop

    • 返回向下的滚动条和向右的滚动条滚动的像素
    1. Node.offsetHeight, Node.offsetWidth
    • 某个 Element节点: 经过浏览器视口变化,返回节点所占据整个页面左上角距离右下角的宽度和高度,并且左上角是包括padding和border
    • html节点: 经过浏览器视口变化,返回整个页面的高度和宽度
    1. Node.offsetLeft,Node.offsetTop
    • 与父节点之间的宽度和高度???

处理标签属性

  1. 最正常,也最麻烦的写法

    1. 增:Node.setAttribute("属性名", "属性值")
    2. 删: Node.removeAttribute("属性名")
    3. 改: Node.setAttribute("已经存在属性名", "新属性值")
    4. 查:Node.getAttribute("属性名")
  2. 但是,对于标准属性来说,可以写的简单一点

    1. 增:Node.style = "border: 10xp solid black"
    2. 删: 无法简写
    3. 改: Node.style = "border: 10px solid red"
    4. 查:Node.style
  3. 对于标准属性的 class 属性来说,因为它实在是太重要了,所以对于class属性也有一套方法:

    1. 首先获得包含所有属性的伪数组Node.classList

    2. 伪数组有以下方法:

      add():追加一个class。
      remove():移除一个class。
      contains():检查当前元素是否包含某个class。
      toggle():将某个class移入或移出当前元素。
      item():返回指定索引位置的class。其实用divTag.classList[1]这样更好
      toString():将class的列表转为字符串。
      
      

题目

  1. HTML 代码
<div id=parent></div>

​ 问: parent的值是多少?

  1. HTMLCollection与NodeList的区别有 答案: AC

    A. HTMLCollection实例对象的成员只能是Element节点,NodeList实例对象的成员可以包含其他节点。

    B. HTMLCollection实例对象都是动态集合,节点的变化会实时反映在集合中。NodeList实例对象都是静态集合。

    C. HTMLCollection实例对象可以用id属性或name属性引用节点元素,NodeList只能使用数字索引引用。

  2. 代码

    var parent1 = document.getElementById('parent1');
    parent1.childNodes.length // 2
    parent1.appendChild(document.createElement('div'));
    parent1.childNodes.length // 请问现在 length 是多少  答案是3
    
    var allDiv = document.querySelectorAll('div')
    allDiv.length // 假设是 2
    document.body.appendChild(  document.createElement('div')  )
    allDiv.length // 请问现在 length 的值是多少???    答案是2
    
    

    答案的原因不是什么动态集合与静态集合,而是第一次的代码重新进行一次查询,而第二次的代码并没有重新进行查询,如果想让第二次的答案是3,那么把第二次的最后一句代码删去,并加上allDiv = document.querySelectorAll('div');allDiv.length就行了

相关文章

  • DOM简述2

    总结 + 我认为的重点 搜索归纳,以掌握 DOM 基本思想 DOM 的作用 === 表示 HTML 文档 DOM提...

  • DOM轻松学习之旅(一)

    DOM简述 DOM 的作用 === 表示 HTML 文档 DOM 提供的 API === 查询,修改 HTML 文...

  • React获取DOM

    React获取DOM的方法简述 createRef 当 ref 属性在组件时,获取组件实例;当ref属性在dom时...

  • DOM 事件流

    这篇笔记主要简述下 DOM 事件流 - DOM Event Flow. 用于理解事件捕获与冒泡. 什么是事件 事件...

  • DOM常用API简述

    文本整理了javascript操作DOM的一些常用的api,根据其作用整理成为创建,修改,查询等多种类型的api,...

  • iOS 面试题集-05

    1、简述xml和json解析: 1>、xml数据解析有两种解析方式;DOM解析与SAX解析,DOM解析必须完成DO...

  • dom 级别和dom 事件处理

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

  • 简述关于通过js判断dom元素去改变该元素的css属性

    简述: 很多场景中,都需要我们需要去通过js去判断DOM元素,按照自己实际的需要去改变DOM的css属性。 例如,...

  • JS双向数据绑定

    双向数据绑定简述 双向数据绑定,可以将JS对象的属性绑定到DOM节点上,实现JS对象跟DOM节点的同名属性的关联,...

  • react面试题

    一、简述VirtualDOM及其工作原理 Virtual DOM 是一个轻量级的 JavaScript 对象,它最...

网友评论

      本文标题:DOM简述2

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