发布于2021-01-31 17:05 阅读(713) 评论(0) 点赞(22) 收藏(2)
如何onclick
使用JavaScript响应一个或任何其他事件来更改HTML元素的类?
现代浏览器添加了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)/) )
尽管可以直接在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,但是,通常的做法是使用框架或库来简化常见任务,并受益于在编写代码时可能不会想到的固定错误和边缘情况。
尽管有些人认为添加〜50 KB的框架来简单地更改类是过大的,但是如果您正在做大量的JavaScript工作或任何可能具有异常跨浏览器行为的事情,则值得考虑。
(大致来说,库是为特定任务而设计的一组工具,而框架通常包含多个库并执行一整套职责。)
上面的示例已在下面使用jQuery进行了重现,它可能是最常用的JavaScript库(尽管还有其他值得研究的地方)。
(请注意,$
这里是jQuery对象。)
$('#MyElement').addClass('MyClass');
$('#MyElement').removeClass('MyClass');
if ( $('#MyElement').hasClass('MyClass') )
此外,jQuery提供了一种捷径,用于添加不适用的类,或删除适用的类:
$('#MyElement').toggleClass('MyClass');
$('#MyElement').click(changeClass);
或者,不需要ID:
$(':button:contains(My Button)').click(changeClass);
作者:黑洞官方问答小能手
链接:http://www.qianduanheidong.com/blog/article/114/e3264a11ac1f8dc2f318/
来源:前端黑洞网
任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任
昵称:
评论内容:(最多支持255个字符)
---无人问津也好,技不如人也罢,你都要试着安静下来,去做自己该做的事,而不是让内心的烦躁、焦虑,坏掉你本来就不多的热情和定力
Copyright © 2018-2021 前端黑洞网 All Rights Reserved 版权所有,并保留所有权利。 京ICP备18063182号-3
投诉与举报,广告合作请联系vgs_info@163.com或QQ3083709327
免责声明:网站文章均由用户上传,仅供读者学习交流使用,禁止用做商业用途。若文章涉及色情,反动,侵权等违法信息,请向我们举报,一经核实我们会立即删除!