DOM编程简介

113 阅读2分钟

网页其实是一棵树

1.png

JS如何操作这棵树

浏览器往window上加一个document即可

1.jpg

概念:JS用document操作网页——这就是Document Object Model 文档对象模型DOM

DOM API 获取元素,也叫标签

  • window.idxxx 或者直接idxxx 前提:id不能跟全局属性冲突
  • document.getElementByld('idxxx')
  • document.getElementsByTagName('div')[0]
  • document.getElementsByClassName('red')[0] 以上三个不好用,需兼容IE的时候才需要
  • document.querySelector('#idxxx')
  • document.querySelectorAll('.red')[0] 这两个常用

获取特定元素

  • 获取html元素:document.documentElement
  • 获取head元素:document.head
  • 获取body元素:document.body
  • 获取窗口(窗口不是元素):window 用于全局监听
  • 获取所有元素:document all IE发明 目前只能在ie里运行,在chrome等浏览器里是假值(第6个falsy值)
if(document.all){console.log('ie浏览器');只能在ie里运行}
else{console.log('其他浏览器');只能在非ie运行}

获取的元素是个啥

显然是个对象,我们需要搞清它的原型

1.jpg

1.jpg

1.jpg

2.jpg

  • Element 包含HTMLElement,XMLElement等不同标准的元素

3.jpg

  • Node 节点

节点?元素?区别

节点Node包括以下几种

  • MDN有完整描述developer.mozilla.org/zh-CN/docs/…
  • x.nodeType得到一个数字
  • 1 表示元素Element,也叫标签Tag
  • 2 表示文本Text
  • 8 表示注释Comment
  • 9 表示文档Document
  • 11 表示文档片段 DocumentFragment
  • 记住1和2即可

1.jpg

1个div有六层原型

1.jpg

节点的增删改查

创建一个标签节点

  • let div1 = document.createElement('div')
  • document.createElement('style')
  • document.createElement('script')
  • document.createElement('li')

创建一个文本节点

  • text1 = document.createTextNode('你好')

标签里面插入文本

  • div1.appendChild(text1) node原型提供的接口
  • div1.innerText = '你好'或者div1.textContent = '你好' Element原型提供的接口
  • 但是不能用div1.appendChild('你好')

1.jpg

插入页面里

  • 你创建的标签默认处于JS线程中
  • 必须把它插到head或者body里面,他才会生效
  • 使用document.body.appendChild(div)或者已在页面中的元素.appendChild(div)

appendChild

  • 代码
  • 页面中有div#test1和div#test2
let div = document.createElement('div')
test1.appendChild(div)
test2.appendChild(div)

-请问最终div出现在哪里?

  • 1.test1里面
  • 2.test2里面
  • 3.test1里面和test2里面
  • 答案:test2里面
  • 一个元素不能出现在两个地方,除非复制一份
  • 复制用cloneNode()

两种方法

  • 旧方法:parentNode.childChild(childNode)
  • 新方法:childNode.remove()IE不兼容
  • 使用appendChild使之回到页面中

改属性

写标准属性

  • 改class:div.className = 'red blue'(全覆盖)
  • 改class:div.classList.add('red')(改部分)

读标准属性

改事件处理函数

改内容

改文本内容

改HTML内容

改标签

改爸爸