美文网首页
DOM 编程

DOM 编程

作者: 弹指一挥间_e5a3 | 来源:发表于2019-11-13 11:34 被阅读0次

    前言

    DOM(Docoment Object Model) 即文档对象模型。也就是 JS 通过 Document 来操作网页。本文将涉及 DOM 操作的基础知识(增删改查)。从 DOM 的基础操作了解 DOM 究竟有多难用。后面我们将会来封装一个 DOM 的库。从此不惧怕难搞的 DOM

    获取元素

    有许多API

    window.xxx  或者直接xxx   //元素有 id
    document.getElementById('xxx') // 通过 id 获取元素
    document.getElementsByTagName('div')[0] // 通过标签名获取元素,需注意的是由于获取的是尾数组,所以要加上下标
    document.getElementsByClassName('red')[0] //通过 class 属性名获取元素,也需要加下标
    document.querySelector('xxx') // 推荐用法。兼容以上所有 api 的功能。
    document.querySelectorAll('.red')[0] // 推荐用法。获取是该条件下所有的元素。所以要得到具体的元素需加下标。
    

    用哪一个

    • 工作中用 querySelectorquerySelectorAll
    • 做 demo 时方便选取直接 id xxx。
    • 如果要兼容 IE 的话,才用 getElement(s)ByXXX

    获取特定元素

    获取 html 元素

    document.documentElement

    获取 head 元素

    document.head

    获取 body 元素

    document.body

    获取窗口 (窗口不是元素)

    window

    获取所有元素

    document.all

    document.all 这个 API 是第 7 个 falsy 值。

    document.all ? console.log(1) : console.log(2)
    // 2
    

    别问,问就是 IE 的锅。有兴趣者自己百度。
    还有其余6个 falsy 值分别是 false"", '', ``nullundefinedNaN0

    节点的增删改查

    创建一个标签节点

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

    创建一个文本节点

    text1 = document.createTextNode('你好')
    

    标签里面插入文本

    div1.appendChild(text1)
    div1.innerText = '你好' 或者 div1.textContent = '你好'
    但是不能使用 div1.appendChild('你好')
    

    插入页面中

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

    两种方法

    旧方法: parentNode.removeChild(childNode)
    新方法: childNode.remove()
    

    改属性

    写标准属性

    改 class: div.className = 'red blue' (全覆盖)
    改 class: div.classList.add('red') // 在原基础上增加
    改 style: div.style = 'width: 100px;color:blue;'
    改 style 的一部分: div.style.width = '200px'
    大小写: div.style.backgroundColor = 'white'
    改 data-*属性: div.dataset.x = 'wuxuwei'
    

    读标准属性

    div.classList / a.href
    div.getAttribute('class') / a.getAttribute('href')
    

    改事件处理函数

    div.onclick 默认为null

    • 默认点击 div 不会有任何事情发生
    • 但是如果你把 div.onclick 改为一个函数 fn
    • 那么点击 div 的时候,浏览器就会调用这个函数
    • 并且是这样调用的 fn.call(div,event)
    • div 会被当作 this
    • event 则包含了点击事件的所有信息,如坐标

    改内容

    改文本内容

    div.innerText = 'xxx'
    div.textContent = 'xxx'
    几乎没有区别
    

    改 HTML 内容

    div.innerHTML = '<strong>重要内容</strong>'

    改标签

    div.innerHTML = '' // 先清空
    div.appendChild(div2) // 再加内容
    

    改爸爸

    newParent.appendChild(div)

    查爸爸

    node.parentNode / node.parentElement

    查爷爷

    node.parentNode.parentNode

    查子代

    node.childNodes / node.children

    查兄弟姐妹

    node.parentNode.childNodes 还要排除自己
    node.parentNode.children 还要排除自己

    查老大

    node.firstChild

    查老幺

    node.lastChild

    查看上一个哥哥/姐姐

    node. previousSibling

    查看下一个哥哥/姐姐

    node.nextSibling

    遍历一个 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 编程

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