那些疯狂到认为自己能够改变世界的人,才能真正改变世界。——<史蒂夫·乔布斯>
原文链接:https://stackabuse.com/how-to-change-elements-class-with-javascript-classname-and-classlista
介绍
HTML 中的 class 属性用于为一个或多个 HTML 元素定义一个类。这样,很多元素可以属于同一类元素并在样式表中共享相同的样式,因此您不必一遍又一遍地为每个元素编写相同的样式。
话虽如此,有时您希望根据用户的输入动态更改样式。例如,您想为您的网页实现白天/黑夜模式,这可以通过更改元素的类来有效地完成。
当您想让用户自定义应用程序的任何方面时,这是一项常见任务。在本指南中 - 我们将看看如何在 JavaScript 中更改 HTML 元素的类。
DOM树
DOM 或 文档对象模型(Document Object Model) 是创建从XML或HTML的树结构的接口。文档元素的层次结构通过DOM表示。一棵树由节点和分支组成,其中元素是节点,元素之间的关系是分支。在 DOM 树中,根节点是html——开始标记 HTML 文档所需的第一个元素:
1 | <!DOCTYPE HTML> |
此页面的 DOM 树将如下所示:
1 | - root element <html> |
这是一个非常简单的树,但同样的过程适用于任何任意复杂的页面。多亏了 DOM 树,通过 JavaScript,我们可以访问页面上的所有 HTML 元素,以及元素的class、id、内容及其所有属性。我们甚至可以添加新元素并删除旧元素。我们可以创建事件来监听和响应它们(即当点击按钮时改变背景颜色)。
获取元素
现在我们知道我们可以从 HTML 获取一个元素,让我们看看如何使用 JavaScript实际做到这一点。要更改元素的类,我们首先必须检索它。根据元素的不同,我们可以通过几种不同的方法获取它们:
getElementsByClassName(class_name)- 返回HTMLCollection包含类名等于HTML元素的class_name。getElementById(id_name)- 返回一个id等于HTML元素id_name。getElementsByTagName(tag_name)- 返回一个HTMLCollection带有标签的元素tag_name。
我们将使用这个 HTML 文件:
1 | <!DOCTYPE HTML> |
使用getElementsByClassName()获取元素
我们制作 script.js 导入到我们页面的文件:
1 | $ touch script.js |
在其中 - 我们将定位并检索属于“headings”的元素class:
1 | console.log(document.getElementsByClassName("headings")); |
由于可能有多个元素属于同一类 - 这将返回一个HTMLCollection:
1 | HTMLCollection(3) |
HTMLCollection 是 HTML 元素的集合,它提供了多种从集合中选择它们的方法,例如:
className()- 返回一个代表类名的字符串;这个方法也可以用来设置元素的类(这正是我们需要的)。innerHTML()- 由于 HTML 元素可以相互嵌套,如果有嵌套元素,此方法会将它们作为 HTML 返回。innerText()- 返回元素内的所有文本(包括嵌套元素)。
还有很多我们可以监听的事件,例如:onclick, ondblclick, onkeydown, onkeypress。可以在官方文档中找到有关 JavaScript 事件的更多信息。
https://developer.mozilla.org/en-US/docs/Learn/JavaScript/Building_blocks/Events
使用getElementById()获取元素
您可以通过以下方法getElementById() 获取元素 id :
1 | console.log(document.getElementById("link-to-google")); |
使用getElementsByTagName()获取元素
最后,如果元素没有 class 或 id ,我们还可以通过它们的 tag 找到元素。这将返回一组 HTML 元素,因为通常有多个具有相同标签的元素。
现在,如果我们想获取所有<li>元素,我们可以通过 li 标签进行搜索:
1 | console.log(document.getElementsByTagName("li")); |
getElementsByClassName 返回值是一样的 - 一个 HTMLCollection。
无论用于获取元素的方法如何 - 我们现在都可以更改它的类。
使用 JavaScript 更改元素的类
使用className更改元素类
让我们创建一个 index.html 包含一些数据的虚拟页面。我们将允许用户在“白天模式”和“夜间模式”之间切换,这会改变网页上使用的调色板。我们还需要在 script.js 此处导入一个文件来查找和更改元素,以及一个 style.css 包含所有样式代码的文件。
让我们从以下开始index.html:
1 | <!DOCTYPE HTML> |
当用户单击“切换日/夜模式”按钮时,所有将改变其外观的元素都有各自的id并分别分配了默认 element-day 类。
每个 element-day 类 element-night 在 style.css 文件中都有一个替代项:
1 | .page-body-day { |
由于我们将更改元素的类,因此我们不想按类进行搜索,否则会出现边缘情况。我们将要搜索某个固定值的东西,即 id,然后检查该 className元素的 - 在该过程中将其更改为适当的类:
1 | function switchMode(){ |
在className返回类元素的名称。但是,如果我们为其分配一个新值 - 我们可以有效地更新class标签的属性。如果元素有一个element-day类,我们将其更改为element-night,反之亦然。
当color在 CSS 中改变 body 的属性时,我们会自动改变所有没有 color 定义属性的元素(在我们的例子中是我们的<p>标签)。当类切换发生时,CSS 开始读取新切换的类并相应地应用样式。
不过,这种方法不是很现代,主要用于适应 Internet Explorer 8 和 9 的滞后功能。
使用classList更改元素类
较新的 Internet 浏览器支持名为 classList. 此属性提供的是应用于某个 HTML 元素的所有类的列表。
注意: Internet Explorer 8 和 9 不支持classList.
classList 有几种方法可以利用:
add(class_name)-class_name在列表中添加一个新类。remove(class_name)-class_name从列表中删除一个类。toggle(class_name)-class_name如果尚未添加,则添加类,否则将其删除。contains(class_name)- 检查是否class_name在应用于HTML元素的类列表中。
话虽如此 - 我们可以重写script.js文件以使用这些方法
1 | function switchMode(){ |
这种方法在 HTML5 和现代浏览器中得到支持,通过这种方式,您可以以类似于jQuery 的方式操作类 - 一个广泛用于操作 HTML 元素、事件等的 JavaScript 库。
通过 classList,您可以跳过包含减少**PLT(页面加载时间)**的外部库,PLT(页面加载时间) 最近已成为SEO 分级的重要Web 重要信号。
结论
JavaScript 获得了大量采用,因为 DOM 使得它可以非常简单地操作网页上的所有内容,等等。
在本教程中,我们研究了如何在 JavaScript 中更改元素的类。
参考
关注【公众号】,了解更多。

赞赏一下 坚持原创技术分享,您的支持将鼓励我继续创作!
支付宝打赏
微信打赏