操作DOM元素属性

192 阅读3分钟

操作DOM元素常用属性

通过 JS 设置/修改标签元素属性,比如通过 src更换 图片

最常见的属性比如: href、title、src 等

语法:对象.属性 = 值

<img src="./images/1.webp" alt="">

<script>
    // 获取图片
    const pic = document.querySelector('img')
    // 修改常见属性
    pic.src = "./images/2.webp"
    pic.title = "修改title"
</script>

操作DOM元素样式属性

可以通过 JS 设置/修改标签元素的样式属性。

比如通过 轮播图小圆点自动更换颜色样式

点击按钮可以滚动图片,这是移动的图片的位置 left 等等

操作DOM元素样式属性有以下三种:

  1. 通过 style 属性操作CSS
  2. 操作类名(className) 操作CSS
  3. 通过 classList 操作类控制CSS(常用)

通过 style 属性操作CSS

语法:对象.style.样式属性 = 值

<style>
    .box {
      width: 200px;
      height: 200px;
      background-color: pink;
}
</style>

<div class="box"></div>

<script>
    let box = document.querySelector('.box')
    box.style.width = "300px"
    box.style.backgroundColor = "skyblue"
    box.style.border = "2px solid red"
</script>

注意⚠️:

  1. 修改样式通过style属性引出
  2. 如果属性有-连接符,需要转换为小驼峰命名法
  3. 赋值的时候,需要的时候不要忘记加css单位

效果:

image.png

操作类名(className) 操作CSS

如果修改的样式比较多,直接通过style属性修改比较繁琐,我们可以通过借助于css类名的形式。

语法:元素.className = 'class类名'

  <style>
    div {
      width: 200px;
      height: 200px;
      background-color: pink;
    }

    .nav {
      color: red;
    }

    .box {
      display: flex;
      justify-content: center;
      align-items: center;
      width: 300px;
      height: 300px;
      background-color: skyblue;
      border: 1px solid #000;
    }
  </style>

  <div class="nav">123</div>

  <script>
    let div = document.querySelector('div')
    div.className = "box"
    // className是使用新值换旧值, 如果需要添加一个类,需要保留之前的类名
    // div.className = "nav box"
  </script>

注意⚠️

  1. 由于class是关键字, 所以使用className去代替
  2. className是使用新值换旧值, 如果需要添加一个类,需要保留之前的类名

效果:

image.png

通过 classList 操作类控制CSS(常用)

为了解决className 容易覆盖以前的类名,可以通过classList方式追加和删除类名

  • 语法:
    • 追加一个类:元素.classList.add('类名')
    • 删除一个类:元素.classList.remove('类名')
    • 切换一个类:元素.classList.toggle('类名')
      • 注意:toggle切换类是:有就删掉,没有就加上
    • 查看是否包含某个类:元素.classList.contains('类名')

示例:

<style>
    .box {
      width: 200px;
      height: 200px;
      color: #333;
    }

    .pink {
      color: red;
      background-color: pink;
    }

    .skyblue {
      display: flex;
      justify-content: center;
      align-items: center;
      width: 300px;
      height: 300px;
      background-color: skyblue;
    }
</style>
<div class="box">文字</div>
<script>
    const box = document.querySelector('.box')
    // 2.1 追加类 add() 类名不加点,并且是字符串
    box.classList.add('pink')
    // 2.2 删除类  remove() 类名不加点,并且是字符串
    box.classList.remove('box')
    // 2.3 切换类  toggle()  有还是没有啊, 有就删掉,没有就加上
    box.classList.toggle('skyblue')
    // 2.4 是否包含某个类,有返回true,没有则返回false
    box.classList.contains('pink')  // true
    box.classList.contains('box')  // false
</script>

效果:

image.png

操作表单元素属性

表单很多情况,也需要修改属性,比如点击眼睛,可以看到密码,本质是把表单类型转换为文本框

正常的有属性有取值的 跟其他的标签属性没有任何区别

  • 语法:
    • 获取: DOM对象.属性名
    • 设置: DOM对象.属性名 = 新值
const uname = document.querySelector('input')

// 获取值  获取表单里面的值 用的  表单.value
// uname.innertHTML 得不到表单的内容
console.log(uname.value) // 电脑

// 设置表单的值
uname.value = '我要买电脑'

console.log(uname.type)  // text
uname.type = 'password'

表单属性中添加就有效果,移除就没有效果,一律使用布尔值表示 如果为true 代表添加了该属性 如果是false 代表移除了该属性

比如: disabled、checked、selected

 // 1. 获取
const ipt = document.querySelector('input')
console.log(ipt.checked)  // false   只接受布尔值
ipt.checked = true
// ipt.checked = 'true'  // 会选中,不提倡  有隐式转换

// 1.获取
const button = document.querySelector('button')
console.log(button.disabled)  // 默认false 不禁用
button.disabled = true   // 禁用按钮

自定义属性

  • 标准属性
    • 标签天生自带的属性 比如class id title等, 可以直接使用点语法操作
    • 比如: disabled、checked、selected
  • 自定义属性
    • 在html5中推出来了专门的data-自定义属性
    • 在标签上一律以data-开头
    • 在DOM对象上一律以dataset对象方式获取
<div data-id="1" data-spm="不知道">1</div>
<div data-id="2">2</div>
<div data-id="3">3</div>
<script>
    const one = document.querySelector('div')
    console.log(one.dataset.id)  // 1
    console.log(one.dataset.spm)  // 不知道
</script>