Il mio obiettivo è modificare il colore di sfondo di una colonna in una tabella senza indirizzare ciascuna voce di dati singolarmente per ID o Nome. So che ci sono diversi modi per farlo, e ho provato 3 per essere precisi, e sto avendo problemi con ciascuno. Per semplicità e chiarezza, in questa domanda, sto chiedendo come farlo con successo usando l'oggetto element.style.backgroundColor nel DOM. Ecco il mio HTML:Ottenere o modificare la proprietà della classe CSS con Javascript utilizzando lo stile DOM
<!DOCTYPE html>
<html>
<head>
<link rel="stylesheet" type="text/css" href="tester.css">
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.4.3/jquery.min.js"></script>
<script type="text/javascript" src="tester.js"></script>
</head>
<body>
<button type="button" onClick="testerFunction()">Test</button>
<table>
<tr>
<th class="col1">Column 1 Header</th>
<th class="col2">Column 2 Header</th>
</tr>
<tr>
<td class="col1">R1 C1</td>
<td class="col2">R1 C2</td>
</tr>
<tr>
<td class="col1">R2 C1</td>
<td class="col2">R2 C2</td>
</tr>
</table>
</body>
</html>
mio file CSS:
.col1{
background-color:lime;
}
E il mio file JavaScript:
function testerFunction() {
alert (document.getElementsByClassName('.col1').style.backgroundColor);
}
quando l'eseguo ottengo più o meno lo stesso errore in IE, Firefox, e Chrome:
non può leggere la proprietà 'backgroundColor' di Undefined.
Ho la sensazione che abbia qualcosa a che fare con il tipo di dati restituito dall'oggetto document.getElementsByClassName DOM. Il sito web di riferimento afferma che restituisce una raccolta HTML. Altri posti che ho trovato dicono che restituisce una "lista" di elementi. Ho provato a creare un array e assegnare il risultato all'array e accedere a ciascun elemento dell'array con un loop, ma ho ottenuto lo stesso errore nello stesso punto. Potrebbe essere che io non so come gestire una "collezione". Ad ogni modo, mi aspettavo "lime" o l'equivalente hex o rgb perché è quello che ho definito nel file CSS. Voglio essere in grado di cambiarlo con Javascript. Qualsiasi aiuto sarebbe molto apprezzato. Grazie!
EDIT: Aggiunto argomenti alla risposta di Shylo Hana per renderlo più modulare
function testerFunction() {
changeColumnColor('col1','blue');
}
function changeColumnColor(column,color) {
var cols = document.getElementsByClassName(column);
for(i=0; i<cols.length; i++) {
cols[i].style.backgroundColor = color;
}
}
check out questo: http://api.jquery.com/css/ –
@ risposta di Shylo è corretta, getElementsByClassName restituisce un array, che ha sicuramente alcuna proprietà "stile" – xiaowl