DOM编程

作者: fanison | 来源:发表于2019-12-26 23:07 被阅读0次

获取元素

window.idxxx  // idxxxx
document.getElementById('idxxx')
document.getElementsByTagName('div')[0]
document.getElementsByClassName('red')[0]

document.querySelector('#idxxx')
document.querySelectorAll('.red')[0]

document.documentElement  // 获取html元素
document.head // 获取head元素
document.body // 获取body元素
window  // 获取窗口
document.all // 获取所有元素   (第六个falsy值)

元素的6层原型链

第一层原型: HTMLDivElement.prototype
第二层原型: HTMLElement.prototype
第三层原型: Element.prototype
第四层原型: Node.prototype
第五层原型: EventTarget.prototype
第六层原型: Object.prototype

增删改查

// 创建一个标签节点
let div1 = document.createElement('div')
document.createElement('style')
document.createElement('script')
document.createElement('li')
// 创建一个文本节点
text1 = document.createTextNode('你好')
// 标签里面插入文本
div1.appendChild(text1)
div1.innerText = 'hello'
div1.textContent = 'hi'
// 标签插入到页面,必须插入到head或body中才会生效
document.body.appendChild(div)
已在页面中的元素.appendChild(div)

Test:页面中有div#test1div#test2,div最终出现在何处?
答案: test2里面,因为一个元素不能出现在两个地方,除非复制一份

let div = document.createElement('div')
test1.appendChild(div)
test2.appendChild(div)
parentNode.removeChild(childNode)
childNode.remove()
<div id="test">fafa</div>

console.log(test.onclick)
test.onclick= function(x){
  console.log(this)
  console.log(x)
}

div.onclick默认为null,默认点击div不会有任何事情发生,但是把div.onclick改为一个函数fn。那么点击div时浏览器就会调用函数fn fn.call(div,event) div被当做this,event则包含了点击事件的所有信息

// 改文本内容
div.innerText = 'xxx'
div.textContent = 'xxx'
// 改HTML内容
div.innerHTML = ‘<strong>aa</strong>’
// 改标签
div.innerHTML = ‘’      // 先清空
div.appendChild(div2)   // 再加内容
// 查看父元素
node.parentNode   
node.parentElement
// 查看子元素
node.children
node.childNodes    // 包括文本节点
// 查看子代
node.childNodes
node.children
// 查看第一个子元素
node.firstChild
node.firstElementChild
// 查看最后一个子元素
node.lastChild
node.lastElementChild
// 查看上一个元素
node.previousSibing
node.previousElementSibling
// 查看下一个元素
node.nextSibing
node.nextElementSibling
// 查看同一父元素的元素
node.parentElement.children
node.parentNode.childNodes
// 遍历div里面所有元素
travel = (node,fn) =>{
  fn(node)
  if(node.children){
    for(let i=0;i<node.children.length;i++){
      travel(node.children[i],fn)
    }
  }
}
travel(div1,(node)=>console.log(node))


DOM操作跨线程

  • 跨线程操作
    JS引擎不能操作页面,只能操作JS
    渲染引擎不能操作JS,只能操作页面

document.body.appendChild(div1) 是如何改变页面的?
当浏览器发现JS在body里面加个个div1对象,浏览器就会通知渲染引擎在页面里面也新增一个div元素,新增的div元素所有属性都照抄div1对象

  • 属性同步

标准属性:对标准属性的修改,会被浏览器同步到页面中
data-*属性:同上
非标准属性:对非标准属性的修改,只会停留在JS线程中,不会同步到页面

相关文章

  • 前端工程师之DOM编程艺术(持续更新)

    @(书籍阅读)[网易云课堂|DOM] DOM编程艺术 网易前端微专业之《DOM编程艺术》笔记,持续更新; 更新事件...

  • 《DOM编程艺术》一、DOM

    title: 《DOM编程艺术》一、DOMdate: 2017-04-13 22:27:25tags: DOM编程...

  • BFC和DOM初级认知总结

    DOM 最近看了JavaScript DOM编程艺术这本书的DOM章节,下面就总结下DOM这个章节关于DOM的知识...

  • JavaScript入门学习书籍到阶段书籍

    入门:《深入浅出JavaScript》《JavaScript DOM编程艺术》 《JavaScript DOM高级...

  • DOM编程

    文档对象模型 一个html页面被浏览器加载的时候,浏览器就会对整个html页面上的所有标签都会创建一个对应...

  • [A] : dom编程

    在此前面的章节都是基础章节,基础章节仅供辅导提升课外使用,不能替代现有的所有内容,将打算分为26个章节完成dom编...

  • DOM编程

    获取元素 元素的6层原型链 第一层原型: HTMLDivElement.prototype第二层原型: HTMLE...

  • DOM 编程

    前言 DOM(Docoment Object Model) 即文档对象模型。也就是 JS 通过 Document ...

  • DOM编程

    JS使用document操作网页这就是Document Object Model文档对象模型 div六层原型 DO...

  • DOM :DOM0 DOM1 DOM2 DOM3

    一、DOM全称文档对象模型(Document Object Model) 二、DOM是什么DOM就是一个编程接口,...

网友评论

      本文标题:DOM编程

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