2010-03-02 22 views
11

provo a scrivere questi codice per rendere visualizzazione a griglia attraverso i CSS :(jsbin)Aggiungi classe per un elemento

var tables = document.getElementsByClassName('tableData'); 
    var rows = tables[0].getElementsByTagName('tr'); 
for(var i=1; i<rows.length; i +=2) { 
    alert(rows[i]); 
    rows[i].className = "alt"; 
} 

questo funziona solo con gli elementi tr ha class="". Ma se voglio aggiungere la classe a tr. Ho provato Core.addClass ma non funziona.

risposta

6

Prova rows[i].className += " alt";

+0

piacevole e semplice, grazie mille :) – nXqd

0

Questo dovrebbe funzionare anche quando l'attributo non è già presente:

rows[i].setAttribute("class", "alt"); 

http://www.w3schools.com/Dom/met_element_setattribute.asp

+0

Uno di noi è fraintendimento della domanda. Credo che sia tu. – SLaks

+0

Potresti avere ragione. –

+0

@SLaks: Penso che entrambi vi sbagliate in modi diversi. tehMick, penso che dovrebbe essere 'rows [i] .setAttribute (" class ", rows [i] .getAttribute (" class ") +" alt ");' – voyager

1

si potrebbe desiderare di utilizzare un framework Javascript. Risulta che Firefox e Internet Explorer hanno entrambi approcci diversi per l'aggiunta di nomi di classi.

Per Firefox, credo che quello che dovete fare

element.setAttribute('class','<className>'); 

mentre in IE, si può fare

element.className='<className>'; 

EDIT

Si scopre che Firefox supporta l'attributo element.className . Tuttavia, Internet Explorer non capisce element.setAttribute('class'...). Devi fare element.setAttribute('className'...) se vuoi usare la chiamata della funzione setAttribute.

jQuery forniscono un'interfaccia in cui si può fare

$(element).addClass('<className>'); 

e si prende cura di tutte le ambiguità del browser. Sono inoltre disponibili le funzioni removeClass() e hasClass() per la gestione e il test degli attributi di classe.

Quindi nel tuo scenario, faresti:

var tables = document.getElementsByClassName('tableData'); 
var rows = tables[0].getElementsByTagName('tr'); 
for(var i=1; i<rows.length; i +=2) { 
    // alert(rows[i]); 
    $(rows[i]).addClass("alt"); 
} 

Nota che si potrebbe semplificare questo ulteriormente con più funzionalità jQuery.

+0

colpisci l'unghia sulla testa. –

+1

'element.className =" nome ";' funziona correttamente su Firefox. – voyager

+1

Anche il metodo setAttribute funziona in IE. È standard, non specifico per Firefox. Inoltre, className è supportato da Firefox, non solo da IE. –

2

Questo sarà solo aggiungere il nome della classe, se non esiste già

var classToAdd = 'alt'; 
if (rows.className.length == 0) 
{ 
    rows.className = classToAdd; 
} 
else if (rows.className.indexOf(classToAdd) < 0) 
{ 
    rows.className += ' ' + classToAdd; 
} 
28

Due anni dopo (2012/06), c'è un nuovo e brillante approccio - element.classList con metodi add(), remove(), toggle() , .

rows[i].classList.add("alt"); 

supportate da

  • Chrome 8+
  • Firefox 3.6+
  • Internet Explorer 10+
  • Opera 11.50+
  • Safari 5.1+
+6

+1 solo perché questo post mi ha reso felice =) – mkoistinen

Problemi correlati