javascript – 改变一个类的风格

我一直在使用jQuery,但是现在我想用纯粹的javascript写一些东西,这是挑战。我目前最大的问题之一就是我找不到设置/改变的方法为一堂课造型。 对于具有id的元素,这不是问题,但我想更改具有相同类的一组元素的样式,而不仅仅是一个具有id的元素。在jQuery中,我只想写:

$('.someClass').css('color','red') 

在纯粹的js中真的没有简单的等价吗?

请尝试以下方法

 var all = document.getElementsByClassName('someClass'); for (var i = 0; i < all.length; i++) { all[i].style.color = 'red'; } 

注意:正如Cheery所指出的, getElementsByClassName在IE中不起作用。 链接的问题有一个很好的方法来解决这个限制

  • javascript document.getElementsByClassName与IE的兼容性
 var all = document.getElementsByClassName('someClass'); for (var i = 0; i < all.length; i++) { all[i].className += " red"; } 

为了更好的编码风格,使用上面的代码向元素添加另一个类,然后使用CSS更改所有元素的颜色,如下所示:

 .red { color:red; } 

你可以使用选择器库,例如Sizzle: http : //sizzlejs.com/但是如果你想要纯粹的JS,我猜你已经坚持获取所有元素,然后以编程方式“精选”那些你感兴趣的类像这样使用RegEx例如:

这相当于你的JQuery oneliner:

 for( i in document.all) document.all[i].className && /\bpost-text\b/g.test(document.all[i].className) && (document.all[i].style.color = "red") 

🙂

如果你不需要它在一行中,你可以使它更快( 更可读 ):

 var myClassName = "someClass"; var regexp = RegExp("\\b"+myClassName+"\\b/g"); var elements = document.all; for( i in elements){ var this_element = elements[i]; if(regexp.test(this_element.className){ this_element.style.color = "red"; } } 

如果“ for(i in object) ”对你不起作用,只需使用classic for循环“ for(var i = 0; i ”。

使用一些稍微更高级的JS概念( 数组函数映射,折叠等 )可以“ 美化 ”一下,JS版本是你再次编码的吗? 我想这不是ECMA Script 5,对吗?

另外,请查看此问题/答案在具有特定CSS类的HTML文档中获取所有元素

你想要改变的是样式表,我想? 这可能在Javascript中,请参阅

  • Quirksmode:改变CSS
  • 使用Javascript完全Pwn CSS ( 在Internet Archive中 )
  • 是改变样式的唯一方法是在JavaScript中按元素执行吗? (可能重复)

我担心那里没有图书馆,我真的很想看到一个……

您可以使用:

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

更改元素的类,然后在CSS文件中定义该新类的样式