Javascript 将类名添加到MouseeEvent上的主体中多次发生?

Javascript 将类名添加到MouseeEvent上的主体中多次发生?,javascript,mouseevent,classname,Javascript,Mouseevent,Classname,我正在向body标记添加一个额外的类名,但是该类名被添加了多次。。。一些关于如何避免这种情况的帮助将是非常受欢迎的 谢谢 <html> <head> <style type="text/css"> .defaultText { font-size:100%; } .myNewClass { font-size:150%; color:red; } </style> <script type="text/javascript"> &l

我正在向body标记添加一个额外的类名,但是该类名被添加了多次。。。一些关于如何避免这种情况的帮助将是非常受欢迎的

谢谢

<html>
<head>

<style type="text/css">
.defaultText {
font-size:100%;
}
.myNewClass {
font-size:150%;
color:red;
}
</style>

<script type="text/javascript">
<!--

var state;

window.onload=function() {

obj=document.getElementsByTagName('body')[0];
state=(state==null)?' defaultText':state;
obj.className+=state;

document.getElementById('addClass').onclick=function() {
obj.className+=(obj.className==' myNewClass')?' defaultText':' myNewClass';
state=obj.className;
}
}

-->
</script>

</head>

<body class="thisClassMustStay">

<div>My text here</div><br />
<a href='#' id="addClass">toggle class</a></div>

</body>
</html>

.defaultText{
字体大小:100%;
}
.myNewClass{
字体大小:150%;
颜色:红色;
}
我的文本在此
我使用此功能(对于没有jQuery的站点)

另一种解决方案是,如果您添加了类,请保留一个全局函数以记住它,或者编写一个函数来检查它:

function hasClass(element, className)
{
    var classes = element.className.split(' ');
    index = classes.indexOf(className);
    return index > -1;
}
第一次运行代码时,请说明us undefined,以便在声明代码时最好将其设置为null,或者将上述内容更改为:

  state = state? ' defaultText' : state;
假设表达式第一次运行时计算结果为true,则状态将设置为
“defaultText”
。请注意,字符串的开头有一个空格。在某些浏览器中,此空间将被删除,而在其他浏览器中,此空间将被保留,因此最好将其删除

>   obj.className += state;
此时,“defaultText”将添加到body元素的类列表中。同样,前导空格可能存在一些问题,最好由健壮的hasClass、addClass和removeClass函数来处理(它们编写起来并不特别困难)

使用上述建议的功能,这可能是:

  if (hasClassname(obj, 'myNewClass')) {
    addClassname(obj, 'defaultText') ;
  } else {
    addClassname(obj, 'myNewClass') ;
  }

} }

如果您需要has/add/removeClassname函数的帮助,请询问

>   obj.className += state;
> 
>   document.getElementById('addClass').onclick = function() {
>     obj.className += (obj.className == ' myNewClass')? ' defaultText' :
>                                                        ' myNewClass';
  if (hasClassname(obj, 'myNewClass')) {
    addClassname(obj, 'defaultText') ;
  } else {
    addClassname(obj, 'myNewClass') ;
  }
state = obj.className;