原生js实现addClass,removeClass,hasClass方法

实现addClass、removeClass、hasClass方法,可以方便地向DOM元素添加/移除class样式,同时判断是否存在某个class样式。下面是实现这三个方法的完整攻略:

1. addClass方法实现

实现addClass方法,首先需要获取DOM元素,并向元素添加一个或多个class样式。可以使用classList属性,它返回一个类似数组的对象,该对象包含元素实际应用的class值。

具体实现代码如下:

/**
 * 添加class样式
 * @param {Object} el DOM元素
 * @param {String} cls class样式
 */
function addClass(el, cls) {
  if (!cls || !el) return;
  var classes = cls.split(" ");
  for (var i = 0, len = classes.length; i < len; i++) {
    var clsName = classes[i];
    if (!el.classList.contains(clsName)) {
      el.classList.add(clsName);
    }
  }
}

这里先判断传入的参数是否为空,然后将参数cls按空格分割成数组,循环遍历该数组,并判断元素是否已经存在class样式,若不存在则通过classList.add()方法添加class样式。

例如:

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8" />
    <title>示例1</title>
    <style>
      .red {
        color: red;
      }
      .blue {
        color: blue;
      }
    </style>
  </head>
  <body>
    <h1 id="title">Hello World</h1>
    <script>
      var title = document.getElementById("title");
      addClass(title, "red");
      addClass(title, "blue");
    </script>
  </body>
</html>

2. removeClass方法实现

实现removeClass方法,同样需要获取DOM元素,并从元素中删除一个或多个class样式。同样可以使用classList属性来获取元素实际应用的class值。

具体实现代码如下:

/**
 * 移除class样式
 * @param {Object} el DOM元素
 * @param {String} cls class样式
 */
function removeClass(el, cls) {
  if (!cls || !el) return;
  var classes = cls.split(" ");
  for (var i = 0, len = classes.length; i < len; i++) {
    var clsName = classes[i];
    if (el.classList.contains(clsName)) {
      el.classList.remove(clsName);
    }
  }
}

这里同样先判断传入的参数是否为空,然后将参数cls按空格分割成数组,循环遍历该数组,并判断元素是否存在class样式,若存在则通过classList.remove()方法移除class样式。

例如:

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8" />
    <title>示例2</title>
    <style>
      .red {
        color: red;
      }
      .blue {
        color: blue;
      }
    </style>
  </head>
  <body>
    <h1 id="title" class="red blue">Hello World</h1>
    <script>
      var title = document.getElementById("title");
      removeClass(title, "red");
    </script>
  </body>
</html>

3. hasClass方法实现

实现hasClass方法,也需要获取DOM元素,判断元素是否含有某个class样式。可以使用classList属性来获取元素实际应用的class值。

具体实现代码如下:

/**
 * 是否含有class样式
 * @param {Object} el DOM元素
 * @param {String} cls class样式
 * @returns {Boolean}
 */
function hasClass(el, cls) {
  if (!cls || !el) return false;
  return el.classList.contains(cls);
}

这里同样先判断传入的参数是否为空,然后使用classList.contains()方法判断元素是否存在class样式。

例如:

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8" />
    <title>示例3</title>
    <style>
      .red {
        color: red;
      }
      .blue {
        color: blue;
      }
    </style>
  </head>
  <body>
    <h1 id="title" class="red blue">Hello World</h1>
    <script>
      var title = document.getElementById("title");
      console.log(hasClass(title, "red")); // true
      console.log(hasClass(title, "green")); // false
    </script>
  </body>
</html>

通过以上方法的组合使用,可以方便地操作DOM元素的class样式,实现页面效果的动态变化。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:原生js实现addClass,removeClass,hasClass方法 - Python技术站

(0)
上一篇 2023年5月27日
下一篇 2023年5月27日

相关文章

  • Vue3响应式方案及ref reactive的区别详解

    Vue3是Vue框架的下一个版本,相较于Vue2,Vue3提供了全新的响应式方案,通过reactive和ref两种API来实现响应式数据绑定。在本文中,我将详细讲解Vue3响应式方案及ref和reactive的区别并提供两个示例,帮助大家更加深入的了解Vue3。 Vue3响应式方案 Vue3的响应式方案是通过Proxy实现的,这种方式相比于Vue2使用的Ob…

    Vue 2023年5月28日
    00
  • vue el-switch初始值(默认值)不能正确显示状态问题及解决

    Vue el-switch初始值不能正确显示状态问题及解决攻略 问题描述: vue使用element UI库中的switch组件时,如果设置了默认值,可能会出现初始状态无法正确显示的问题。 问题分析: 这个问题的原因是因为element UI中的switch并没有提供v-model来绑定value值,而是提供了v-model来绑定一个boolean值,也就是…

    Vue 2023年5月27日
    00
  • Vite开发环境搭建详解

    Vite开发环境搭建详解 Vite是一款现代化的前端开发工具,它可以快速创建和启动本地开发服务器,具有快速冷重载、简单的配置和高效的构建等特点。本篇文章将详细讲解如何搭建Vite开发环境。 环境安装与配置 安装Node.js Vite依赖Node.js运行环境,首先需要在官网(https://nodejs.org/)下载Node.js安装包进行安装。安装完成…

    Vue 2023年5月27日
    00
  • Vue中的event对象介绍

    下面是“Vue中的event对象介绍”的详细攻略。 什么是Vue中的event对象 event对象是在Vue中处理DOM事件的重要对象,通过它可以获取触发事件的信息,如事件类型、目标元素等,还可以阻止默认事件和冒泡事件的传递。在Vue中,大部分的组件事件都是基于浏览器的原生事件转换而来,所以event对象有许多类似于原生事件的属性和方法。 event对象的属…

    Vue 2023年5月28日
    00
  • vue2.0 computed 计算list循环后累加值的实例

    下面就为您详细讲解如何使用 Vue2.0 的 computed 计算属性来实现 list 循环后累加值的功能。 1. 简介 在 Vue.js 中,computed 属性是一种计算属性,它能够基于其它属性的值进行计算,并返回一个计算后的值。本文中将会通过 computed 属性来计算 list 循环后累加值的方法。 2. 实现步骤 2.1 数据源 首先,我们需…

    Vue 2023年5月29日
    00
  • vue项目及axios请求获取数据方式

    Vue.js 是一款流行的前端框架,可以帮助前端开发者构建复杂的单页应用程序。使用 axios 可以方便地获取和传递数据。本文将提供关于 Vue.js 项目及 axios 请求获取数据的完整攻略。 安装 Axios Axios 是一个现代的基于 Promise 的 HTTP 请求库,它用于浏览器和 Node.js。在 Vue.js 项目中使用 Axios,首…

    Vue 2023年5月28日
    00
  • vue语法之render函数和jsx的基本使用

    Vue语法之render函数和JSX的基本使用 Vue中提供了一种灵活的渲染方式—— render 函数和 JSX 语法,它们可以帮助我们更精细化地控制组件的渲染过程,实现更加灵活的代码编写。 render函数 render 函数是 Vue 中的一个非常重要的函数,它用于渲染虚拟 DOM,我们可以通过定义 render 函数来自定义组件的渲染方式。 rend…

    Vue 2023年5月28日
    00
  • 一文详解Vue 的双端 diff 算法

    一文详解Vue 的双端 diff 算法 什么是双端 diff 算法 双端 diff 算法是 Vue 框架中用于虚拟 DOM 更新的一个核心算法。与传统 diff 算法不同,双端 diff 算法在新的修改和比较过程中存在两个方向,从开头到结尾(前向)和从结尾到开头(后向),所以称为双端(Two-Way)算法。 双端 diff 算法的原理 Vue 双端 diff…

    Vue 2023年5月29日
    00
合作推广
合作推广
分享本页
返回顶部