Suppongo che si desidera cancellare tutto i bambini, non solo i bambini diretti, quindi dovrebbe essere ricorsivo. Dato che diversi elementi di input vengono cancellati in modo diverso, devi controllare il loro tipo in modo da sapere cosa fare con essi. Suppongo che si desidera cancellare textarea anche, ma i pulsanti lasciare invariato:
function clearChildren(element) {
for (var i = 0; i < element.childNodes.length; i++) {
var e = element.childNodes[i];
if (e.tagName) switch (e.tagName.toLowerCase()) {
case 'input':
switch (e.type) {
case "radio":
case "checkbox": e.checked = false; break;
case "button":
case "submit":
case "image": break;
default: e.value = ''; break;
}
break;
case 'select': e.selectedIndex = 0; break;
case 'textarea': e.innerHTML = ''; break;
default: clearChildren(e);
}
}
}
chiamata con un riferimento all'elemento:
clearChildren(document.getElementById('IdOfTheDiv'));
Edit:
dimenticato il select ...
Modifica 2:
Alcune correzioni: childNodes.length, gestione di elementi senza tagName e lettere maiuscoleNome valori.
+1, mi piace anche questo – karim79
Buona ipotesi sul fatto di aver bisogno di lavorare sui bambini dei bambini, tuttavia non hai bisogno di ricorsione per afferrare i nodi discendenti. –
Grazie per la risposta !! Sto cercando di implementarlo e ho uno strano sintomo. Non c'è alcun effetto visibile su un semplice modulo di test. Se ottengo alert per stampare elemento ottengo [oggetto HTMLDivElement] (buono ..) Se ottengo alert() per stampare element.childNodes ha [oggetto nodeLIst] (di nuovo buono) ma se ottengo alert() per echo il valore di i dentro il for() non si accende mai così sembra che non iterare sui nodi? Codice come: function clearChildren (elemento) { per (var i = 0; i
jerrygarciuh