lunes, febrero 09, 2015

JavaScript: Removiendo hijos

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)


No hay comentarios.: