2012-02-24 11 views
8

Ho lavorato con jQuery per un po ', ma ora voglio scrivere qualcosa in puro javascript e sta dimostrando di essere impegnativo .. Uno dei miei maggiori problemi al momento è che Non ho trovato un modo per impostare/cambiare lo stile per un corso. Questo non è un problema per gli elementi con id, ma voglio cambiare lo stile di un gruppo di elementi con la stessa classe e non solo per un elemento con un id .. In jQuery vorrei solo scrivere:javascript - cambiare stile di una classe

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

Non c'è davvero alcuna equivalenza semplice a questo in puro js?

+0

Questo ma essere utile: http://stackoverflow.com/questions/1933602/how-to-getelementbyclass-instead-of-getelementbyid-with-javascript – IsisCode

+0

@Cheery non è un duplicato. L'OP desidera esplicitamente una risposta non jquery. – JaredPar

+0

@JaredPar Mi dispiace, non ho letto molto attentamente. – Cheery

risposta

12

provare il seguente

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

Nota: Come Cheery sottolineato getElementsByClassName non funziona in IE. La questione collegata ha un bel modo per aggirare questa limitazione

+0

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

+0

O anche "for (i in all)", almeno credo che funzioni anche in modalità non rigida. – nana

+0

@Cheery che è deludente. Aggiornerà – JaredPar

1

È possibile utilizzare libreria di selezione, ad esempio Sizzle: http://sizzlejs.com/ ma se si vuole JS puri che presumo sono bloccati con ottenere tutti gli elementi, e poi programmaticamente "raccolta manuale" quelli che hanno le classi siete interessati ad utilizzare RegEx in questo modo, per esempio:

questo è l'equivalente del vostro 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") 

:)

Se non ne hai bisogno in una sola riga è possibile renderlo più veloce (e molto più leggibile):

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

Se "per (in oggetto) "non funziona per te, usa solo il classico ciclo per" per (var i = 0; i < elements.length; i ++)".

Potrebbe essere 'abbelliti' un po 'con l'uso di alcuni concetti JS leggermente più avanzati (mappature funzione di matrice, piegatura e ad), quale versione JS stai codifica agains? I immagino che non è ECMA script 5, giusto?

Inoltre, controllare la domanda/risposta Get All Elements in an HTML document with a specific CSS Class

0

È possibile utilizzare:

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

cambiare la classe dell'elemento e poi basta definire lo stile per quella nuova classe nel file CSS

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

Per una migliore stile di codifica aggiungere un'altra classe agli elementi con il codice sopra e quindi utilizzare CSS per cambiare il colore di tutti gli elementi come questo:

.red { 
    color:red; 
} 
Problemi correlati