2012-02-24 13 views
8

He estado trabajando con jQuery por un tiempo, pero ahora quiero escribir algo en javascript puro y está resultando desafiante ... Uno de mis mayores problemas en este momento es que No he encontrado una manera de establecer/cambiar el estilo de una clase. Este no es un problema para los elementos con el ID, pero quiero cambiar el estilo de un grupo de elementos con la misma clase y no sólo para un elemento con un id .. En jQuery me acaba de escribir:javascript - cambiar el estilo de una clase

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

¿Realmente no existe una equivalencia simple para esto en js puro?

+0

Este ma y sé útil: http://stackoverflow.com/questions/1933602/how-to-getelementbyclass-instead-of-getelementbyid-with-javascript – IsisCode

+0

@Cheery no es un duplicado. El OP explícitamente quiere una respuesta que no sea jquery. – JaredPar

+0

@JaredPar Disculpe, no lo leí con mucho cuidado. – Cheery

Respuesta

12

intente lo siguiente

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

Nota: Como se señaló alegre getElementsByClassName no funcionará en IE. La cuestión vinculada tiene una buena manera de evitar esta limitación

+0

IE before 9 no lo admite. http://stackoverflow.com/questions/7410949/javascript-document-getelementsbyclassname-compatibility-with-ie – Cheery

+0

O incluso "para (i en total)", al menos creo que funciona en modo no estricto también. – nana

+0

@Cheery eso es decepcionante. Actualizará – JaredPar

1

Puede utilizar la biblioteca de selección, por ejemplo Arden: http://sizzlejs.com/ pero si quieres JS puras que te supongo que están atrapados con la obtención de todos los elementos, y luego mediante programación "a dedo" los que tienen clases a las que está interesado en el uso de expresiones regulares como este por ejemplo:

este es un equivalente de su oneliner JQuery:

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

:)

Si no lo necesita en una sola línea puede hacer que sea más rápido (y mucho más legible):

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"; 
    } 
} 

Si "para (i en el objeto) "no funciona, solo use el ciclo clásico para" for (var i = 0; i < elementos.length; i ++)".

Podría ser 'embellecieron' un poco con el uso de algunos conceptos JS ligeramente más avanzados (correlaciones de funciones de matriz, plegado y tal), la versión JS estás codificación agains? I supongo que no es script ECMA 5, ¿verdad?

Además, echa un vistazo a esta pregunta/respuesta Get All Elements in an HTML document with a specific CSS Class

0

Se puede utilizar:

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

para cambiar la clase del elemento y luego simplemente definir el estilo de esa nueva clase en el archivo CSS

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

Para un mejor estilo de codificación añadir otra clase a los elementos con el código de arriba y luego usar CSS para cambiar el color de todos los elementos como este:

.red { 
    color:red; 
} 
Cuestiones relacionadas