详解原生JS动态添加和删除类

yizhihongxing

下面就详细讲解一下“详解原生JS动态添加和删除类”的完整攻略。

概述

在前端开发中,动态改变元素的样式是十分常见的需求,其中动态添加类名和动态删除类名就是两种常见的实现方式。通过动态改变元素的类名,可以轻松实现样式的交互效果和动画效果。

动态添加类名

方法一:使用Element.classList方法

Element.classList是DOM API提供的一个属性,它包含了元素的class列表。使用classlist,我们可以轻松对元素的class进行添加、删除和切换操作。

下面是向元素中动态添加类名的示例代码:

// 获取目标元素
const targetElem = document.querySelector('.target');

// 添加类名
targetElem.classList.add('new-class');

在这个示例中,我们首先通过querySelector获取了目标元素,然后使用classList.add()方法向目标元素中添加了一个名为new-class的类名。

方法二:直接修改元素的className属性

Element对象还有一个className属性,它可以读取或设置元素的class属性。通过className属性的操作,我们也可以轻松实现类名的添加:

// 获取目标元素
const targetElem = document.querySelector('.target');

// 添加类名
targetElem.className += 'new-class ';

在这个示例中,我们同样首先获取了目标元素,并通过直接修改className属性向其添加了new-class类名。

动态删除类名

方法一:使用Element.classList方法

要删除类名,我们同样可以使用Element.classList提供的相关方法。相比于添加类名,删除类名只需要调用ClassList.remove()方法即可:

// 获取目标元素
const targetElem = document.querySelector('.target');

// 删除类名
targetElem.classList.remove('old-class');

在这个示例中,我们通过classList.remove()方法删除了目标元素上的一个名为old-class的类名。

方法二:直接修改元素的className属性

与动态添加类名时不同,当我们要删除类名时不能简单地使用+=对className属性进行操作,因为这样会污染元素原先的类名。正确的做法是使用字符串的replace()方法:

// 获取目标元素
const targetElem = document.querySelector('.target');

// 删除类名
targetElem.className = targetElem.className.replace('old-class', '');

在这个示例中,我们同样通过获取目标元素,然后使用字符串的replace()方法,将目标元素上的old-class类名删除了。

示例说明

示例一:动态切换元素的类名

动态切换元素的类名是一种常见的实现样式交互效果的方式。下面的示例中,我们给一个按钮添加了一个点击事件,点击按钮时会让按钮变成红色,再次点击时则会变回原样:

<!DOCTYPE html>
<html>
    <head>
        <style>
            .btn {
                background-color: green;
                color: #fff;
                padding: 10px;
                border: none;
                cursor: pointer;
                border-radius: 5px;
            }
            .btn.active {
                background-color: red;
            }
        </style>
    </head>
    <body>
        <button class="btn" id="toggleBtn">
            点击切换样式
        </button>
        <script>
            const toggleBtn = document.getElementById('toggleBtn');
            toggleBtn.addEventListener('click', function() {
                toggleBtn.classList.toggle('active');
            })
        </script>
    </body>
</html>

在这个示例中,我们首先在CSS中定义了两个类名:.btn和.btn.active。.btn类名表示按钮的默认样式,.btn.active表示按钮的激活状态。然后我们给按钮添加了一个click事件,通过按钮的classList.toggle()方法,切换了按钮的active类名,使按钮实现了样式的动态切换。

示例二:动态删除多个类名

当我们需要动态删除多个类名时,可以使用一个循环遍历的方式,依次删除目标元素上的每一个类名。下面的示例中,我们首先定义了一个名为removeClass()的函数,然后在点击按钮时,调用该函数删除元素上的两个类名:

<!DOCTYPE html>
<html>
    <head>
        <style>
            .btn {
                background-color: green;
                color: #fff;
                padding: 10px;
                border: none;
                cursor: pointer;
                border-radius: 5px;
            }
            .btn.active {
                background-color: red;
            }
            .btn.disabled {
                opacity: .5;
                cursor: not-allowed;
            }
        </style>
    </head>
    <body>
        <button class="btn active disabled" id="toggleBtn">
            点击删除多个类名
        </button>
        <script>
            const toggleBtn = document.getElementById('toggleBtn');

            function removeClass(elem, className) {
                // 将目标元素上的类名通过空格分隔为一个数组
                const classNames = elem.className.split(' ');

                // 遍历类名数组,依次删除目标元素上的每一个类名
                for (let i = 0; i < classNames.length; i++) {
                    if (classNames[i] === className) {
                        classNames.splice(i, 1);
                        i -= 1;
                    }
                }

                // 将删除后的类名数组重新拼接成字符串,赋值给目标元素的className属性
                elem.className = classNames.join(' ');
            }

            toggleBtn.addEventListener('click', function() {
                removeClass(toggleBtn, 'active');
                removeClass(toggleBtn, 'disabled');
            })
        </script>
    </body>
</html>

在这个示例中,我们首先在CSS中定义了三个类名:.btn、.btn.active和.btn.disabled。.btn类名是按钮的默认样式,.btn.active表示激活状态,.btn.disabled表示禁用状态。然后我们在按钮上添加了三个类名。当我们点击按钮时,通过调用前面定义好的removeClass()函数,依次删除按钮上的active和disabled两个类名,使按钮恢复到默认样式。在removeClass()函数中,我们首先将元素上的类名通过split()方法分割成一个数组,然后使用循环遍历的方式,依次查找并删除数组中的目标类名,最后使用join()方法将类名数组再次拼接成一个字符串,赋值给目标元素的className属性,完成对类名的删除操作。

以上就是“详解原生JS动态添加和删除类”的完整攻略和两个示例的说明。希望能对您有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详解原生JS动态添加和删除类 - Python技术站

(0)
上一篇 2023年6月10日
下一篇 2023年6月10日

相关文章

  • js闭包的9个使用场景

    下面是详细讲解“js闭包的9个使用场景”的完整攻略。 什么是JavaScript闭包? JavaScript闭包是一个函数和定义该函数的环境的组合。闭包让你可以在一个内部函数中访问到其外部函数的作用域。具体来说,就是内部函数能够“记住”并访问外部函数的变量,即使外部函数已经返回了。 9个JavaScript闭包的使用场景 1. 模块化开发 闭包可以帮助我们实…

    JavaScript 2023年6月10日
    00
  • js判断两个日期是否相等的方法

    JS判断两个日期是否相等的方法有多种实现方式,下面将分别介绍两种常用的方法: 方法一:将日期转为时间戳比较 将两个日期对象转化为时间戳(即毫秒数)后进行比较。 function compareDate(date1, date2) { return date1.getTime() === date2.getTime(); } 上述代码中,getTime() 方…

    JavaScript 2023年5月27日
    00
  • javascript 解决表单仍然提交即使监听处理函数返回false

    当我们使用JavaScript对表单进行监听处理时,通常会添加一个事件处理函数,并在函数中使用return false语句来阻止表单的提交。但是,在某些情况下,仍然有可能发生表单提交的情况,这时我们需要采取其他措施来确保表单不会提交。下面是一些解决方法: 1. 使用preventDefault方法 preventDefault()方法可以阻止元素发生默认行为…

    JavaScript 2023年6月10日
    00
  • 原生JS实现动态添加新元素、删除元素方法

    原生JS实现动态添加新元素的方法 在HTML中,我们可以通过JavaScript来动态添加、删除元素。下面是实现动态添加新元素的方法: 1. 创建新元素 要创建一个新元素,我们需要使用 createElement() 方法。它需要一个参数,即我们要创建的元素的名称。 let newElement = document.createElement(‘div’)…

    JavaScript 2023年6月10日
    00
  • 一文详解JS私有属性的6种实现方式

    一文详解JS私有属性的6种实现方式 在JavaScript中,我们可以使用不同的方法来实现私有属性。私有属性是指只能在类内部访问,并且不能在类外部访问的属性。下面将详细介绍JS私有属性的6种实现方式。 1. 使用Symbol来实现私有属性 Symbol是ES6新增的数据类型,它是一种不可变的数据类型,用于作为对象属性的唯一标识符,从而避免了属性名冲突。在类的…

    JavaScript 2023年5月27日
    00
  • 浅谈JS的原型和继承

    浅谈JS的原型和继承 1. 原型 在JavaScript中,每个对象都有一个原型对象,它充当了该对象的基础。原型对象是一个普通的对象,用于存储对象所继承的属性和方法。 我们可以使用Object.getPrototypeOf(obj)方法获取一个对象的原型。 var obj = {}; console.log(Object.getPrototypeOf(obj…

    JavaScript 2023年6月10日
    00
  • Javascript闭包的作用与使用方法浅析

    Javascript闭包的作用与使用方法浅析 什么是Javascript闭包? Javascript闭包是指函数在定义时,它内部的变量、函数和作用域会被一同记住,并在函数执行完毕后依然能够访问和使用这些变量、函数和作用域,即使函数所在的外部作用域已经被销毁,也能访问这些数据。 举个例子,下面的代码展示了一个闭包的简单例子: function outer() …

    JavaScript 2023年6月10日
    00
  • JS实现点击颜色块切换指定区域背景颜色的方法

    针对“JS实现点击颜色块切换指定区域背景颜色”的情况,可以考虑以下实现方案。 实现思路 定义颜色块选项和给定区域(例如div); 给颜色块添加点击事件,记录点击的颜色值; 利用DOM操作,将颜色值赋予给定区域的背景色; 代码示例 <!doctype html> <html> <head> <meta charset=…

    JavaScript 2023年6月11日
    00
合作推广
合作推广
分享本页
返回顶部