操作DOM

本文对DOM节点操作的介绍,希望对您有所帮助

一. 获取元素

  • 非常规

    • html document.documentElement

      设置根节点font-size时可能用到

    • head document.head

    • body document.body

  • 常规

    • id document.getElementById()

    • class document.getElementsByClassName()

      伪数组 像数组但不具备数组函数 有length值

      可以转化 var ans = Array.from(…)

    • 标签 document.getElementsByTagName()

    • name document.getElementsByName()

    • querySelector

      document.querySelector() 参数为在css中使用选择的方法

      只会返回遇到的第一个

    • querySelectorAll

      可以选出所有

二.操作元素属性

  • 自定义属性

    约定 data-**

    .dataset 可以获取 也可以在这上面加

    删除用delete * .dataset. *

    • 增 改

      setAttribute()

    • removeAtrribute()

    • 获取

      getAttribute()

  • 操作元素内容

    • innerHtml

      会解析

    • innerText

      不解析html 获取的只有文本

    • value

  • 操作样式

    • 获取

      • 行内 .style.###

        例如 background-color —–>

        ​ 用中括号括起来.style[ ] / 驼峰规则 .style.backgroundColor

      • 内部样式 外部样式

        getComputedStyle(参数为对象(id / get函数获取)) 获取不能赋值写样式

    • 批量操作

      • .className 操作dom的类名 修改的话是覆盖原来的

      ​ 可以使用 += 重复的也会直接加进去

      • .classList
        • 增加 add 重复的不会加进去
        • 删除 remove
        • 切换 toggle 有就删掉 没有就加

三. DOM节点

  • 元素节点 getElementBy..

    childNodes 所有节点 children 所有元素

    ​ nodeType 属性返回节点类型。

    ​ 如果节点是一个元素节点,nodeType 属性返回 1。

    ​ 如果节点是属性节点, nodeType 属性返回 2。

    ​ 如果节点是一个文本节点,nodeType 属性返回 3。

    ​ 如果节点是一个注释节点,nodeType 属性返回 8。

    ​ nodeName

    ​ nodeValue 属性节点的叫属性值 文本节点是文本内容 元素节点没有值

    firstChild firstElementChild

    lastChild lastElementChild

    previousSibling previousElementSibling 找哥哥

    nextSibling nextElementSibling 找弟弟

    parentNode parentElement 差不多

  • 属性节点 getAttribute

    id.attributes[1]

  • 文本节点 innerText

四. 操作DOM节点

  1. 节点操作

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    //创建节点
    var odiv = document.createElement("div")
    //box 为父节点id
    //插入节点
    box.appendChild(odiv)
    // insertBefore(要插入的节点,谁的前面) 可以实现在任何地方插入

    //删除节点
    // removeChild(节点对象)
    box.removeChild()
    box.remove() // 自我销毁以及后代

    //替换节点 replaceChild(新的节点,老的节点)

    //克隆
    //cloneNode() 默认参数为false 不包括孩子

五. 获取元素信息

懒加载

  • 获取元素的占地面积

    offsetWidth/offsetHeight content+padding+border

    注意:单位 数字类型

    ​ display:none 无法拿到值

    clientWidth/clientHeight content+padding 不包括border

  • 获取元素偏移量

    offsetLeft/offsetTop

    注意:偏移量是相对有定位的父级

    如果父级元素都没有定位,偏移量相对于body

    clientLeft/clientTop 了解即可

    计算的是距离自己左上角(也就是边框宽)

  • 获取可视窗口的尺寸

    window.innerHeight / innerWidth 获取的包含滚动条

    document.documentElement.clientWidth / clientHeight 不包含滚动条

六. 事件

  1. 绑定事件

    • .onclick = …
    • .addElementListener(“click”,function(){…})
  2. 解绑事件

    • this.onclick = none
    • .removeElementListener(“onclick”,….[函数名字])
  3. 事件类型

    • 鼠标事件

      • click

      • dbclick 双击

      • contextmenu 右键单击 常用于自定义右键菜单

      • mousedown 鼠标按下

      • mousemove 鼠标在身上移动

      • mouseup 鼠标抬起

      • 移入移出

        mouseover mouseout

        在孩子上也会触发

        mouseenter mouseleave

        只会在自己上触发

    • 键盘事件

      • keydown 按下键盘
      • keyup 抬起键盘
    • 表单事件

      • 获取焦点 focus

      • 失去焦点 blur

      • change 获取焦点和失去焦点时内容不一样才会触发

      • input 适用于类似百度搜索 边输入边模糊查询

      • submit 提交 reset 重置

        必须要有form表单结构

        两者都得给form绑

    • 触摸事件 针对移动端

      • touchstart
      • touchmove
      • touchend
  4. 事件对象

    1
    2
    3
    username.onkeyup = function(event){
    //事件对象也就是形参
    }

    鼠标事件

    event.clientX / clientY 距离可视窗口的值

    event.pageX / pageY 相对于文档的

    event.offsetX / offsetY 相对于自己盒子(触发元素)的左上角的距离

    ​ 做鼠标跟随时有可能会误触到别的盒子可以设置pointer-events = none

  5. 阻止事件传播

    stopPropagation()

    阻止默认行为 例如 鼠标右键

    dom0 return false

    dom2 preventDefault()

  6. 事件委托

    利用冒泡机制

    把子元素的事件委托给父元素来做

七. 正则表达式

  1. 格式

    1
    2
    3
    4
    //字面量
    var reg = /abc/ //包含abc 这个串
    //内置构造函数
    var reg2 = new RegExp("abc")
  2. 元字符

    • 一位数字 /\d/

    • 一位非数字 /\D/

    • 一位空白(空格 缩进 换行) /\s/

    • 一位非空白 /\S/

    • 字母数字下划线 /\w/

    • 一位非字母数字下划线 /\W/

    • /./ 任意符号 不包括换行

    • 转义字符 .

    • 边界符

      • ^ 开始

        /^\d/ 开头必须是数字

      • $ 结尾

        /\d$/ 结尾必须是数字

    • 限定符

      只能修饰紧挨的一个

      • *代表0-多次
      • +代表1-多次
      • ?代表0-1
      • {n} 指定次数
      • {n,} 大于等于n
    • 特殊符号

      • ( ) 括起来表示一个整体
      • | 或者 管的是两边的两个整体
      • [ ]代表一个 例:[abcdf] 代表一个出现就行
      • [^abc] 不包含abc范围内
  3. 捕获

    全局标识符 g 全局 克服懒惰 i 不区分大小写

    reg.exec(“”)

  4. 贪婪特性 加?克服

    /\d{1,4}/ 选择时会尽量多选 加?之后只选择最小值


操作DOM
http://kaikai12321.github.io/2022/11/21/操作DOM/
作者
Hou Kai
发布于
2022年11月21日
许可协议