首页 > 编程语言 >如何用JavaScript更改元素的类?

如何用JavaScript更改元素的类?

时间:2023-10-28 19:23:46浏览次数:40  
标签:JavaScript 更改 元素 className getElementById MyClass document MyElement

内容来自 DOC https://q.houxu6.top/?s=如何用JavaScript更改元素的类?

我该如何使用JavaScript响应onclick或其他事件来更改HTML元素的类?


现代HTML5技术用于更改类

现代浏览器添加了classList,它提供了更方便地操作类的方法,而无需使用库:

document.getElementById("MyElement").classList.add('MyClass');

document.getElementById("MyElement").classList.remove('MyClass');

if ( document.getElementById("MyElement").classList.contains('MyClass') )

document.getElementById("MyElement").classList.toggle('MyClass');

不幸的是,这些在Internet Explorer 10之前的版本中不起作用,尽管有一个shim可以添加到IE8和IE9,可以从这个页面获取。然而,它得到越来越多的支持。

简单的跨浏览器解决方案

选择元素的标准的JavaScript方法是使用document.getElementById("Id"),以下示例使用的是这种方法 - 你当然也可以以其他方式获取元素,在某些情况下可能只需使用this - 然而,详细说明这个问题超出了答案的范围。

更改元素的所有类:

要替换所有现有类为一个或多个新类,请设置className属性:

document.getElementById("MyElement").className = "MyClass";

(您可以使用空格分隔的列表应用多个类。)

向元素添加额外的类:

要在不删除/影响现有值的情况下向元素添加一个类,请在类名后附加一个空格和新的类名,如下所示:

document.getElementById("MyElement").className += " MyClass";

从元素中删除一个类:

要从元素中删除单个类,而不会影响到其他潜在的类,需要一个正则表达式替换:

document.getElementById("MyElement").className =
   document.getElementById("MyElement").className.replace
      ( /(?:^|\s)MyClass(?!\S)/g , '' )
/\* Code wrapped for readability - above is all one statement \*/

此正则表达式的解释如下:

(?:^|\s) # 匹配字符串的开头或任何单个空格字符

MyClass  # 要删除的类名的字面文本

(?!\S)   # 负向前视确保上述内容是整个类名
         # 确保后面没有非空格字符

g标志告诉替换重复所需的,以防类名已多次添加。

检查元素是否已经应用了一个类:

与用于删除类的相同正则表达式也可以用于检查特定类是否存在:

if ( document.getElementById("MyElement").className.match(/(?:^|\s)MyClass(?!\S)/) )

将这些操作分配给onClick事件:

虽然将JavaScript直接写入HTML事件属性(例如onClick="this.className+=' MyClass'")是可行的,但这并不是推荐的行为。特别是在更大的应用程序中,通过将HTML标记与JavaScript交互逻辑分离,可以实现更易于维护的代码。

实现这一点的第一步是通过创建一个函数,并在onClick属性中调用该函数,例如:

<script type="text/javascript">
 function changeClass(){
 // 以上代码示例
 }
</script>
...
<button onClick="changeClass()">我的按钮</button>

(这并不要求将这些代码放在script标签中,这只是为了示例的简洁性,并将JavaScript包含在单独的文件中可能更合适。)
第二步是将onClick事件从HTML中移出,放入JavaScript中,例如使用addEventListener。

<script type="text/javascript">
 function changeClass(){
 // 以上代码示例
 }

 window.onload = function(){
 document.getElementById("MyElement").addEventListener( 'click', changeClass);
 }
</script>
...
<button id="MyElement">我的按钮</button>

(注意,window.onload部分是必需的,以便在HTML加载完成后执行该函数的内容 - 没有这个,当JavaScript代码被调用时,MyElement可能不存在,所以那一行会失败。)

JavaScript框架和库

上述代码都是标准的JavaScript,然而,常见的做法是使用框架或库来简化常见任务,以及从编写代码时可能不会想到的固定错误和边缘情况中受益。

虽然有些人认为添加一个约50 KB的框架只是为了改变一个类是过度杀伤力,但如果你做任何大量的JavaScript工作,或者做任何可能具有不寻常的跨浏览器行为的事情,那么这是值得考虑的。

(大致来说,库是针对特定任务的工具集,而框架通常包含多个库并执行一整套职责。)

以上示例下面使用jQuery重制,可能是最常用的JavaScript库(尽管还有其他值得研究的方法)。

(注意,这里的$是jQuery对象。)

使用jQuery更改类:

$('#MyElement').addClass('MyClass');

$('#MyElement').removeClass('MyClass');

if ( $('#MyElement').hasClass('MyClass') )

此外,jQuery提供了一个快捷方式,用于在不适用的情况下添加一个类,或删除一个适用的类:

$('#MyElement').toggleClass('MyClass');

使用jQuery将函数分配给点击事件:

$('#MyElement').click(changeClass);

或者,不需要id:

$(':button:contains(My Button)').click(changeClass);

标签:JavaScript,更改,元素,className,getElementById,MyClass,document,MyElement
From: https://www.cnblogs.com/xiaomandujia/p/17794490.html

相关文章

  • 逆向招商银行模拟器app,自定义修改任何元素,详细教程
    我今天闲着没事,就从网上找来了一个破解版的招商银行模拟器,然后这个APP呢是破解版,我们在给它继续完善优化一下吧。 因为这个版本存在众多问题,打开后会提示出来一个作者附加的信息,我下面给大家截图。出现这种提示非常麻烦,我这边要弄的通过逆向的办法把这个提示直接删除掉或者......
  • 面试必刷TOP101:15、删除有序链表中重复的元素-I
    题目题解importjava.util.*;publicclassSolution{publicListNodedeleteDuplicates(ListNodehead){//空链表if(head==null)returnnull;//遍历指针ListNodecur=head;//指针当前和下一位不为空......
  • 5款在线JavaScript加密混淆工具
    5款常用、好用的在线JavaScript加密混淆工具,网址请从截图中查看。1、jscrambler2、JShaman3、javascriptobfuscator4、freejsobfuscator5、jjencode......
  • PAT_B1008 数组元素循环右移问题
    一个数组A中存有N(>0)个整数,在不允许使用另外数组的前提下,将每个整数循环向右移M(≥0)个位置,即将A中的数据由(A0​A1​⋯AN−1​)变换为(AN−M​⋯AN−1​A0​A1​⋯AN−M−1​)(最后M个数循环移至最前面的M个位置)。如果需要考虑程序移动数据的次数尽量少,要如何设计移动的方法?输入格式:每......
  • 反编译建设银行高仿app模拟器,修改里面的任何元素教程
    我研究了一下网上这个建设银行模拟器,有些东西是可以改有些是改不了的,比如名称可以长按修改 那么我们比如说想要把那个LOGO头像改成自定义的怎么改呢?其实这个也是有办法的,很简单,只需要替换/assets/res/目录下的指定文件即可我下面做一个演示哈,大家跟着我操作就行了目前是怎么......
  • day 3 链表 203.移除链表元素、707.设计链表、206.反转链表
    203.移除链表元素题目链接:203.移除链表元素视频教程文字教程虚拟头节点虚拟头节点的目的:消除头节点的特殊性痛点:删除头节点和删除其他节点的操作是不一样的,导致写代码时需要分两种情况考虑因为其他链表都是通过前一个节点删除的而头节点没有前一个节点,只需将头节点向......
  • html 隐藏元素占位/不占位
    关于循环定时隐藏/显示元素,从而实现一个一闪一闪的效果如图:实现方法:设置display但是display在设为none是不占位置隐藏的display:none;设置visibility而visiblity是占位隐藏visibility:hidden;varnum=true;window.setInterval(()=>{vari=document.......
  • 二维数组根据其下标,判断它是第几个元素【i * col + j】
    二维数组根据其下标,判断它是第几个元素33022121221publicclassqqqq{staticintrow;staticintcol;publicstaticvoidmain(String[]args){Scannerin=newScanner(System.in);row=in.nextInt();col=in.nextI......
  • JavaScript 中的this
    在JavaScript中,this关键字的行为使其有别于其他编程语言。与某些语言在编译时确定的不同,在JavaScript中,它是根据函数的调用方式在运行时动态绑定的。这意味着每次调用该函数时this的值都会有所不同。函数上下文类上下文 回调构造函数等用到......
  • JavaScript 数组存储方式及对象
    一、数组的存储1、当声明一个变量时,vara=111;在后台计算机翻译时,var声明a变量所以此时会产生一个栈内存,变量a的初始值为undefined,然后=111;undefined消失,111的值被赋值给了a。如果多个变量赋值的话,栈内存的执行顺序是先进后出的顺序。也叫做压栈。栈内存属于基础数据......