DOM节点

1,829 阅读2分钟

操作DOM节点

常规意义上 ‘增删改查’

再向页面增加一个节点,首先,你应该先有一个节点

操作分类:

1.在JS中创建一个节点

语法:document.createElement('要创建的标签名')

2.向页面增加一个节点

语法1:元素.appendChild(要添加的节点)

作用:向元素的末尾追加一个节点

语法2:元素.insertBefore(要插入的节点,插入到哪个节点的前面)

作用:向元素中追加一个节点

注意:两个参数都是必填项

第二个参数传递正常节点时,代表插入到这个节点的前面

第二个参数传递的是null 的时,表示插入到“元素”的末尾

<body>
  <div class="box">
    <p>我是通过 HTML 手写出来的 P 标签</p>
  </div>
  <script>
  // 0. 获取元素
    var myDiv = document.getElementsByClassName('box')[0]
    var oP = document.querySelector('p')

    // 1.1 创建一个元素节点
    var oDiv = document.createElement('div')
    var oSpan = document.createElement('span')
    // console.log(oDiv)
    // console.log(oSpan)

    // 1.2 创建一个文本节点(了解)
    var oText = document.createTextNode('我是通过 JS 创建出来的文本节点')
    // console.log(oText)

    // 1.3 将刚才创建的文本节点添加到元素节点内  元素.appendChild(要添加的节点)
    oDiv.appendChild(oText)
    oSpan.innerText = '我是通过 innerText 直接赋值的字符串'

    // 2 向页面中增加一个节点
    // 2.1 元素.appendChild(要添加的节点)
    // myDiv.appendChild(oDiv)  //伪数组.appendChild
    // myDiv.appendChild(oSpan)

    // 2.2 元素.insertBefore(要插入的节点,插入到哪个节点的前面)
    myDiv.insertBefore(oDiv, oP) //将我们通过JS创建的div标签,插入到页面的P标签前面
    myDiv.insertBefore(oSpan, null) //第二个参数传递null,表示插入到“元素”的末尾
  </script>
</body>

3.删除页面的某一个节点

语法1:父节点.removeChild('要删除的子节点')

语法2:节点.remove()

4.修改页面的某一个节点

语法:父节点.replaceChild('新节点','旧节点/要被修改的节点')

作用:将页面中的某一个节点做一个替换

5.获取页面的某一个节点

之前获取元素的方法

6.克隆一个节点(把一个节点复制出一个一模一样的)

语法:节点.cloneNode(参数)

参数:默认是false,表示不克隆后代节点

选填是true,表示克隆后代节点

<body>
  <div class="box">
    <p>我是第一个P 标签</p>
    <p>我是第二个 P 标签</p>
  </div>
  <script>
  // 0. 获取节点
    var box = document.querySelector('.box')
    var oP = document.querySelector('p') //满足条件的第一个P标签
    console.log(oP)

    // 3.删除页面的某一个节点  父节点.removeChild('要删除的子节点')
    // 父节点.removeChild('要删除的子节点')
    // box.removeChild(oP)

    // 节点.remove()
    box.remove()

    // 4.修改页面的某一个节点
    // var oSpan = document.createElement('span') //创建一个span标签
    // oSpan.innerText = '我是通过JS创建出来的span标签' //给span标签添加文字
    // box.replaceChild(oSpan, oP) //用刚刚创建出来的span标签,替换原来的p标签

    // 6.克隆一个节点
    // var cloneP = oP.cloneNode() //克隆出来一个和oP节点一模一样的新节点  不包含后代节点
    // var cloneP = oP.cloneNode(true) //克隆出来一个和oP节点一模一样的新节点  包含后代节点
    // box.appendChild(cloneP)

    /**
     * box.appendChild(oP)
     * 
     *    错误理解:将oP这个节点,添加到box的末尾,然后页面就有3个标签了
     *    正确理解:将oP这个节点,添加到box的末尾
     *        !  因为DOM节点在页面中只会具有一个(核心)
     *           所以这一步相当于将原本排列在box内部的第一个P标签,移动到了box内部的最后一个
    */
  </script>
</body>

获取非行内样式(了解)

语法:window.getComputedStyle(元素).要查询的css属性名

IE 的语法:元素.currentStyle.要查询的css属性名 (了解)

获取元素偏移量

获取元素在页面上相对参考父级的左边和上边的距离

参考父级:其实就是假设你要给一个元素'绝对定位',它是根据谁来进行定位,那么这个元素的偏移量参考父级就是谁

1.元素.offsetParent 获取元素的相对父级

2.元素.offsetLeft 获取元素距离左边的距离

3.元素.offsetTop 获取元素距离顶部的距离

获取元素尺寸(元素的占地面积)

语法1:

元素.offsetWidth

元素.offsetHeight

语法2:

元素.clientWidth

元素.clientHeight

区别:

offsetXXX --- 实际的宽度/高度 + padding + border

clientXXX --- 实际的宽度/高度 + padding

获取浏览器窗口尺寸

1.window.innerXXX(Width/Height) --- 计算的时候,会包含浏览器的滚动条

2.document.documentElement.clientXXX((Width/Height)) --- 计算的时候,不会计算滚动条(只计算浏览器的可是区域)