跳到主要内容位置

修改 DOM 元素属性

在学习了如何触发事件和访问 DOM 元素属性之后,我们来看一下如何修改它们。修改 DOM 元素属性是实现交互式页面的途径之一,我们可以通过 JavaScript 修改现有 DOM 属性的内容,从而在用户交互后,例如点击按钮,或者从后台请求数据之后,把新的内容更新到页面上。

修改 DOM 属性的方式

修改 DOM 属性和访问 DOM 属性几乎一样,在访问属性的基础上,直接使用 = 赋值即可:


inputText.value = "test";

对于 classListdata-,以及 attribute方式也有对应的修改方法,接下来我们分别看一下。

直接修改 DOM 对象属性

与访问 DOM 属性一样,这也是最常见、最推荐的方式。下面的例子:

  • 定义了一个 range 类型的 input 滑动条。
  • 设置最小值为 0,最大值为 100,当前值为 80。
  • 然后有一个按钮可以把它的值调至最大。

在 JavaScript 中,我们获取滑动条和按钮的实例,然后给按钮添加了 click 事件监听,在里边设置滑动条的 value 属性值为 max 属性的值,即最大值,这里我们同时使用了获取 DOM 属性和修改 DOM 属性的语法。

<input id="progress" type="range" min="0" max="100" value="80">
<button id="btnMax">调至最大</button>
<script>
const progress = document.getElementById('progress');
const btnMax = document.getElementById('btnMax');
btnMax.addEventListener('click', () => {
progress.value = progress.max;
});
</script>

预览:

使用 setAttribute()

第二种方式是使用 DOM 实例的 setAttribute() 方法,与 getAttribute() 相对,用于修改属性。不过仍然需要注意,与getAttribute() 方法类似,它只是修改 HTML 文档中,对应元素的值,也就是我们写代码的时候,指定的字符串,修改的结果并不会同步到 DOM 属性中,例如上边同样的例子,直接点击“调至最大”按钮,可以把 value 属性设置为 100,但是只能设置一次,后面再修改了 value 属性,再点击按钮就没用了(因为在 HTML 代码中 value 已经设置为了 100),并且如果一开始就滑动修改了 value 属性,再点击按钮也不会生效:

<input id="progress" type="range" min="0" max="100" value="80">
<button id="btnMax">调至最大</button>
<script>
const progress = document.getElementById('progress');
const btnMax = document.getElementById('btnMax');
btnMax.addEventListener('click', () => {
progress.setAttribute('value', progress.max);
});
</script>

预览:

通过浏览器开发者工具可以观察这一现象。

setAttribute 对于 value 这种既可以由用户修改,也可以由代码修改的属性,会有这样的情况,但是对于修改其他静态的属性,例如 classtitle 等不会有这种问题。

修改 Class 列表

对于 class 列表,我们可以通过 DOM 属性或 setAttribute() 修改:


<p id="text" class="text red">这是一个段落</p>

<script>
const text = document.getElementById("text");

text.className = "paragraph blue";
// 或
text.setAttribute("class", "primary green");

</script>

对于使用 clasList 的方式,我们可以在返回的结果中,调用 add() 来添加 class,调用 remove() 来删除 class:


<p id="text" class="text red">这是一个段落</p>

<script>
const text = document.getElementById("text");

text.classList.add("blue");
text.classList.remove("red");

</script>

获取 Style

对于内联样式属性,可以直接使用 = 赋值:

<p id="text" style="background-color: grey; color:white">这是一个段落</p>

<script>
const text = document.getElementById("text");

text.style.color = "lightblue";
text.style["background-color"] = "black";

</script>

设置自定义的 data 属性

对于自定义的 data-* 属性,我们也可以像类似于 style 属性一样的方式,使用 dataset 对象来修改具体的某个属性。如果要删除一个自定义属性,可以使用 delete 运算符:

<p id="text" data-next="新的内容" data-prev-content="旧的内容">这是一个段落</p>

<script>
const text = document.getElementById("text");

text.dataset.next = "下一篇内容";
delete text.dataset.prevContent;

</script>

这个就是修改 DOM 对象属性的方法,大体上和访问 DOM 属性一样:

  • 直接修改 DOM 属性可以使用 =
  • 使用 setAttribute 方法。
  • 修改 class 可以使用 classList 的 add()remove() 方法。
  • 内联样式可以修改 style 对象中的属性。
  • 自定义的 data-* 属性,可以通过 dataset 中对应的属性修改。
提示

一系列的课程让你成为高级前端工程师。课程覆盖工作中所有常用的知识点和背后的使用逻辑,示例全部都为工作项目简化而来,学完即可直接上手开发!

即使你已经是高级前端工程师,在课程里也可能会发现新的知识点和技巧,让你的工作更加轻松!

《React 完全指南》课程,包含 React、React Router 和 Redux 详细介绍,所有示例改编自真实工作代码。点击查看详情。

《Vue 3.x 全家桶完全指南与实战》课程,包括 Vue 3.x、TypeScript、Vue Router 4.x、Vuex 4.x 所有初级到高级的语法特性详解,让你完全胜任 Vue 前端开发的工作。点击查看详情。

《React即时通信UI实战》课程,利用 Storybook、Styled-components、React-Spring 打造属于自己的组件库。

《JavaScript 基础语法详解》本人所著图书,包含 JavaScript 全面的语法知识和新特性, 可在京东、当当、淘宝等各大电商购买