HTML基础

73 阅读2分钟

什么是 DOM

  • DOM -> Document Object Model
  • DOM 定义了表示和修改文档所需的方法。DOM 对象即宿主对象,由浏览器厂商定义,用来操作 HTML 和 XML 功能的一类对象的集合。也有人称 DOM 是对 HTML 及 XML 的标准编程接口

Document: 整个文档

  • 查看元素节点

    • getElemntById: 在 IE8 以下不区分大小写
    • getElementsByTagName: 取出所有对应标签的元素,是个类数组
    • querySelector: 非实时的,类似于镜像
  • 遍历节点树

    • parentNode -> 父节点 (最顶层节点为 document)
    • childNodes -> 子节点们
    • firstChild -> 第一个子节点
    • lastChild -> 最后一个子节点
    • nextSibling -> 后一个兄弟节点
    • previousSibling -> 前一个兄弟节点
  • 基于元素节点树的遍历

    • parentElement -> 返回当前元素的父元素节点 (IE不兼容)
    • children -> 只返回当前元素子节点
    • node.childElementCount === node.chidren.length (IE不兼容)
    • firstElementChild -> 第一个元素节点 (IE不兼容)
    • lastElementChild -> 最后一个元素节点 (IE不兼容)
    • nextElementSibling/previousElementSibling -> 后一个/前一个兄弟节点 (IE不兼容)
  • 节点的四个属性

    • nodeName: 元素的标签名,以大写形式表示,只读
    • nodeValue:Text 节点或 Comment 节点的文本内容,可读写
    • nodeType:该节点的类型, 只读
      • 元素节点: 1
      • 属性节点: 2
      • 文本节点: 3
      • 注释节点: 8
      • document: 9
      • documentFragment: 11
    • attributes:Element 节点的属性集合
  • 节点的一个方法: Node.hasChildNodes() image

  1. getElementById 方法定义在 Document.prototype 上,即 Element 节点上不能用
  2. getElementsByName 方法订一张 HTMLDocument.prototype 上,即非 html 中的document不能使用(XML document , Element)
  3. getElementsByTagName 方法定义在 Document.prototype 和 Element.prototype
  4. HTMLDocument.prototype 定义了一些常用的属性, body,head 分别指代HTML文档中的标签, document.documentElement --> <html>
  5. Document.prototype 上定义了 documentElement 属性,指代文档的根元素,HTML文档中,他总是指代<html>元素
  6. getElementsByClassName,querySelectorAll, querySelector 在 Document.prototype, Element.prototype 中均有定义
 Document.prototype === document.__proto__.__proto__

DOM 基本操作

    • document.createElement()
    • document.createTextNode()
    • document.createComment()
    • document.createDocumentFragment()
    • PARENTNODE.appendChild()
    新建一个元素,插入是直接插入。插入一个已有的元素,是剪贴,原来元素会被剪贴到新的位置,以前位置的元素消失。
    
    • PARENTNODE.insertBefore()
        parentNode.insertBefore(a, b) // insert a before b
    
  • 删 (谋杀 与 自杀)
    • parent.removeChild() // 实际上是剪切出来
    • child.remove() // ES5 提供的新方法
  • 替换
    • parent.replaceChild(new, origin) // 拿新的元素替换老的元素