array di Javascript removeChild
-
24-10-2019 - |
Domanda
questo sembra abbastanza semplice, ma non riesco proprio a farlo funzionare. Potrei aggiungere elementi DOM, ma non riesco proprio a rimuoverli quando si usa un array.
<script language="javascript">
fields = 0;
count = 0;
function addInput() {
if (fields != 10) {
var htmlText = "<input type='search' value='' name='field[]' />";
var remButton = "<input type='button' value='del' onclick='remove()' />";
var newElement = document.createElement('div');
newElement.id = 'SomeID'+fields;
newElement.innerHTML = htmlText + remButton + newElement.id;
var fieldsArea = document.getElementById('text');
fieldsArea.appendChild(newElement);
fields += 1;
} else {
...
}
count++;
}
// NEED HELP FROM HERE PLEASE
// You don't need to Loop, just get the button's id and remove that entire 'SomeID'
function remove() {
fieldsArea = document.getElementById('text');
fieldsArea.removeChild(SomeID1); <-----------------------THIS WORKS!
fieldsArea.removeChild(SomeID+count); <------------------THIS JUST WOULDN'T
count--;
}
</script>
Nella funzione di rimozione, scrivendo SomeID1 funziona ed eliminare il primo elemento aggiunto, ma quando provo ad usare un 'count', non riesco proprio a eliminare i miei 'elementi'.
Qualsiasi aiuto sarebbe apprezzato.
Grazie!
Soluzione
Dovete ottenere un riferimento al primo elemento. Attualmente si sta passando un SomeID
variabile non definita alla funzione.
per esempio:.
var element = document.getElementById('SomeID' + fields);
// or starting by zero: var element = document.getElementById('SomeID0');
element.parentNode.removeChild(element);
Se si desidera rimuovere il div
per il quale è stato cliccato il pulsante, si deve passare un riferimento al corrispondente div
alla funzione remove
.
'<input type="button" value="del" onclick="remove(this.parentNode)" />';
this
farà riferimento al pulsante ed in quanto è un figlio della div
, this.parentNode
si riferisce a quella div
.
È inoltre necessario modificare la funzione di accettare l'elemento che deve essere rimosso:
function remove(element) {
element.parentNode.removeChild(element);
count--;
}
Probabilmente hanno anche all'aggiornamento fields
, ma non sono sicuro di come il codice dovrebbe funzionare.
Se si desidera rimuovere tutti loro che dovete ciclo:
for(;fields--;) {
var element = document.getElementById('SomeID' + fields);
element.parentNode.removeChild(element);
}
hanno anche uno sguardo alla documentazione removeChild
.
Altri suggerimenti
Il removeChild
bisogno di un nodo (elemento DOM) come parametro. In questo caso
fieldsArea.removeChild(SomeID+count);
si potrebbe ad esempio passare il nodo in questo modo
fieldsArea.removeChild(document.getElementById('SomeID'+count));