Supongamos que se desea eliminar una lista de nodos hijos en un elemento particular en el dom; regularmente seguiríamos la siguiente forma
// Bajo parent Id los elementos que deseo eliminar tienen un className en común.
var nodes =
document.getElementsByClassName(className);
var parentNode =
document.getElementById(parentId);
if (nodes) {
for (var i = 0; i < nodes.length; ++i) {
var node = nodes[i];
if (node) {
if (parentNode.contains(node)) {
parentNode.removeChild(node);
}
}
}
}
El problema con el código anterior es que no se eliminan todos los elementos, si no alrededor de la mitad y esto sucede porque el valor nodes.length es alterado cada vez que eliminamos un nodo (o al menos es lo que creo, tampoco me detuve mucho tiempo a comprobar mi teoría), el cambio siguiente me funciono bien (simplemente cambie el siglo del for para que decremente en lugar de incrementar)
for (var i = nodes.length - 1; i >= 0; --i)
// Bajo parent Id los elementos que deseo eliminar tienen un className en común.
var nodes =
document.getElementsByClassName(className);
var parentNode =
document.getElementById(parentId);
if (nodes) {
for (var i = 0; i < nodes.length; ++i) {
var node = nodes[i];
if (node) {
if (parentNode.contains(node)) {
parentNode.removeChild(node);
}
}
}
}
El problema con el código anterior es que no se eliminan todos los elementos, si no alrededor de la mitad y esto sucede porque el valor nodes.length es alterado cada vez que eliminamos un nodo (o al menos es lo que creo, tampoco me detuve mucho tiempo a comprobar mi teoría), el cambio siguiente me funciono bien (simplemente cambie el siglo del for para que decremente en lugar de incrementar)
for (var i = nodes.length - 1; i >= 0; --i)
Comentarios