DOM编程全解

137 阅读2分钟

1.复习

7种数据结构:number、string、symbol、bool、null、undefined、object

5种falsy值:0、‘’、NaN、undefined、null

2.JS

网页其实是一棵树,JS要如何操作这个库呢?

通过document,浏览器往window上加一个document

JS用document操作网页,这就是Document Object Model(文档对象模型)

3.获取元素,也叫标签

1.window.idxxx或者直接idxxx

2.document.getElementById('idxxx')

3.document.getElementsByTagName('div')[0]

4.document.getElementsByClassName('red')[0]

5.document.querySelector('#idxxx')

6.document.querySelectorAll('div')[0]

特定元素:

1.body:document.body

2.head:document.head

3.html:document.documentElement

4.窗口:window

5.获取所有元素:document.all

这个是就六个falsy值

4.获取的元素

获取的元素是一个对象,以div举例:

先是自身属性:className、id、style等

第一层原型:HTMLDivElement.protoype  所有div的共有属性

第二层原型: HTMLElement.prototype  所有HTML元素的共有属性

第三层原型:Element.prototype  所有HTML和xml的共有属性

第四层原型:Node.prototype 所有节点属性 ,节点包括便签文本注释

第五层原型:eventTarget.prototype  里面有最重要的函数属性addEventListener

最后一层就是Object.prototype

5.节点的增删改查

1.增

(1)创建一个标签节点

let div = document.createElement('div')  // 创建一个 div 标签
let ul = document.createElement('ul')     // 创建一个 ul 标签
console.log(ul)    //  <ul> </ul>

(3)在标签中插入文本

let div = document.createElement('div')
let text= document.creatTextNode('你好')

div.appendChild(text)

或者

div.innerText('你好')

或者

div.textContent('你好')

appendChild后面只能插入对象,div.appendChild('你好')报错

(4)插入页面

document.body.appendChild(div)

创建好的标签,默认在JS线程里面

(5)

let div = document.createElement('div')
test1.appendChild(div)
test2.appendChild(div)

div会在test2中,要想两个里面都有,复制一下

div1=div.cloneNode(true) //后面加个true是深拷贝
test1.appendChild(div1)
test2.appendChild(div)

2.删

两种方法:

parentNode.removeChild(childNode)(老方法)
div.parentNode.removeChild(div)//先找到父亲,然后在删除自己
childNode.remove()div.remove()//自己删除自己

删除后还可以再回来

div.remove();
document.body.appentChild(div)

这个删除只是在页面上删除了,还在JS内存中

永久删除:

div.remove();
div = null

删除后让他等于空,div和那个内存没有了联系,内存就被垃圾回收了

3.改

1.写标准属性

(1)改class:

div.className = "red";//原有的class被覆盖

(2)改class:

div.classList.add('red') //不会覆盖原有的class

(3)改style:

div.style.width = '20px'//css中有‘-’的在这换成驼峰命名法

2.读标准属性

div.classList

div.getAttribute('class')

3.事件处理函数

div.onclick默认是null,

js把一个函数赋值给他,点击的时候,浏览器就会调用这个函数

fn.call(div,event)

div 被当做this,event包含点击事件的所有信息

div.addEventListener//升级版

4.改文本内容

div.innerText = 'xxx'

或者

div.textContext = ‘xxx’

5.改html内容

div.innerHTML = '<h1>标题</h1>'

6.改标签

div.innerHTML = ''

div.appendChild(div2)

先清空在赋值

7.改爸爸parentNode

newParentNode.appentChild(div)

直接在新节点加进去就行

4.查

1.查爸爸

node.parentNode

node.parentElement

2.查yeye

node.parentNode.parentNode

3.查子代

node.childrem

node.childNodes;//用这个查有空格回车

4.查兄弟姐妹

node.parentNode.children

5.查孩子

node.firstChild

node.lastChild

6.查兄弟

node.previousSibing

node.nextSibing

6.JS的操作是跨线程的

浏览器分为渲染引擎和JS引擎

JS引擎只能操作JS

渲染引擎只能操作页面

跨线程通信