2012-03-20 16 views
16

Sto lavorando a un progetto che ha un div con 32 bambini. Devo creare un menu a tendina che cambierà lo sfondo di ogni div e del genitore. Per le altre parti del progetto che non hanno figli, ho utilizzato il seguente codice:Come selezionare tutti i figli di un elemento con javascript e modificare la proprietà CSS?

function changediv(color) { 
document.getElementById('div1').style.background = color; 
} 

HTML:

<select> 
<option onClick="changediv('#555');">Hex</option> 
<option onClick="changediv('blue');">Colorname</option> 
<option onClick="changediv('url(example.com/example.png)');">Image</option> 
</select> 

ho potuto solo aggiungere un ID diverso per ogni bambino (id1 , id2, id3, ...), ma ci sono 32 bambini e non solo dovrei aggiungere 32 ID, ma anche 32 linee di Javascript. Ci deve essere un modo migliore; in qualche modo selezionando i bambini o addirittura cambiando il codice CSS effettivo che seleziona i bambini.

Grazie, Ian

+1

Hai provato una soluzione CSS pura? Non dovrebbe assolutamente avere alcun JS. – Hamish

+0

Lo farei, ma devo usare il menu a tendina per cambiare gli sfondi div, e potrei essere in grado di farlo, ma sarebbe estremamente complicato. – Ian

risposta

25

Anche se questo può essere fatto in una sola riga con JQuery, io parto dal presupposto che non si utilizza JQuery - in questo caso, il codice sarà:

var nodes = document.getElementById('ID_of_parent').childNodes; 
for(var i=0; i<nodes.length; i++) { 
    if (nodes[i].nodeName.toLowerCase() == 'div') { 
     nodes[i].style.background = color; 
    } 
} 

Vedi http://jsfiddle.net/SxPxN/ per un rapido esempio ho creato - Clicca su "cambiare 'em" per vederlo in azione

+0

Questo non funziona affatto. Ecco il codice che ho usato: function changediv (color) { var nodes = document.getElementById ('div1'). ChildNodes; per (var i = 0; i Ian

+1

in realtà è necessario filtrarlo - vedi la mia soluzione modificata –

+0

"div" dovrebbe essere "opzione" per lavorare con il suo codice HTML – hobberwickey

4

tenta di utilizzare sotto codici:

var nodes = document.getElementById('ID_of_parent').getElementsByTagName("div"); 
for(var i=0; i<nodes.length; i++) { 
    nodes[i].style.background = color; 
} 
Problemi correlati