本站消息

站长简介/公众号

  出租广告位,需要合作请联系站长


+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

暂无数据

如何使用JavaScript更改元素的类?

发布于2021-01-31 17:05     阅读(713)     评论(0)     点赞(22)     收藏(2)


如何onclick使用JavaScript响应一个或任何其他事件来更改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');

不幸的是,尽管有一些垫片可以将其支持添加到IE8和IE9中,但这些功能在v10之前的Internet Explorer中无法使用,可从此页面获得但是,它越来越受到支持

简单的跨浏览器解决方案

选择元素的标准JavaScript方法是using 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) # Match the start of the string or any single whitespace character

MyClass  # The literal text for the classname to remove

(?!\S)   # Negative lookahead to verify the above is the whole classname
         # Ensures there is no non-space character following
         # (i.e. must be the end of the string or space)

如果g已多次添加类名,则标志指示替换根据需要重复。

要检查类是否已应用于元素:

上面用于删除类的正则表达式也可以用作检查特定类是否存在的检查:

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

###将这些操作分配给onclick事件:

尽管可以直接在HTML事件属性(例如onclick="this.className+=' MyClass'"内编写JavaScript,但不建议这样做特别是在较大的应用程序上,通过将HTML标记与JavaScript交互逻辑分开,可以实现更具可维护性的代码。

实现此目的的第一步是创建一个函数,然后在onclick属性中调用该函数,例如:

<script type="text/javascript">
    function changeClass(){
        // Code examples from above
    }
</script>
...
<button onclick="changeClass()">My Button</button>

(不需要在脚本标签中包含此代码,这仅仅是出于示例的简洁,并且将JavaScript包含在不同的文件中可能更合适。)

第二步是将onclick事件移出HTML并移入JavaScript,例如使用addEventListener

<script type="text/javascript">
    function changeClass(){
        // Code examples from above
    }

    window.onload = function(){
        document.getElementById("MyElement").addEventListener( 'click', changeClass);
    }
</script>
...
<button id="MyElement">My Button</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将功能分配给click事件:
$('#MyElement').click(changeClass);

或者,不需要ID:

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




所属网站分类: 技术文章 > 问答

作者:黑洞官方问答小能手

链接:http://www.qianduanheidong.com/blog/article/114/e3264a11ac1f8dc2f318/

来源:前端黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

22 0
收藏该文
已收藏

评论内容:(最多支持255个字符)