Sin entrar en demasiados detalles, estoy limpiando los espacios en blanco dentro de las tablas usando javascript. Necesito eliminar grandes cantidades de textnodes. Este parece ser el cuello de botella en mi script cuando se trata de IE9.Eliminando eficientemente los nodos de texto del DOM
Todos los siguientes métodos hacen el trabajo, pero causan una enorme desaceleración.
domNode.removeNode(true);
domNode.nodeValue = "";
domNode.parentNode.removeChild(domNode);
Hay una manera de hacer una eliminación a granel o una manera de ocultarlos en el dom o tal. Solo algo más rápido.
También he intentado esto en los textnodes:
domNode.innerHTML = '';
Mientras se ejecuta rápidamente, los textnodes parecen ser unphased por ella.
Además, tengo que conservar los enlaces de eventos para que un .innerHTML reemplazar en toda la tabla realmente no parezca una opción. Aunque funciona aproximadamente 5 veces más rápido.
Actualización: puntos de referencia Rough en soluciones sugeridas:
//around 480ms
stripWhitespaceTextNodes(domNode);
//around 640ms
parent.removeChild(domNode);
stripWhitespaceTextNodes(domNode);
parent.insertBefore(domNode, nextNode);
//around 700ms
tables[i].style.visibility = 'hidden';
stripWhitespaceTextNodes(domNode);
tables[i].style.visibility = 'visible';
//around 1140ms
tables[i].style.display = 'none';
stripWhitespaceTextNodes(domNode);
tables[i].style.display = 'block';
Esto se hizo en 4 mesas con una tabla que tiene 1500 filas.
El quid de la función stripWhitespaceTextNodes() es la eliminación de los nodos de texto, esto parece ser el cuello de botella y aquí están mis varios intentos de hacerlo.
domNode.parentNode.removeChild(domNode);
domNode.removeNode(true);
domNode.nodeValue = ""; // <-- CURRENTLY THIS ONE IS THE TOP RUNNER
domNode.replaceWholeText('');
domNode.deleteData(0, domNode.length);
var txtNode = document.createTextNode("");
domNode.parentNode.replaceChild(txtNode, domNode);
parent.insertBefore(domNode, nextNode);
//fast but doesn't work
domNode.innerHTML = '';
Me interesarían los detalles. ¿Por qué necesita eliminar whitespace-textNodes de una tabla, no afectarán la visualización? – Bergi
Lo hacen en IE9. Refiérase a esta pregunta para esos detalles. http://stackoverflow.com/questions/9895095/wanted-ie9-table-cell-ghost-alive-and-without-js En cuanto a por qué no puedo arreglarlo en el lado del servidor, esa es otra historia larga. .. – Serhiy
¿Has intentado utilizar domNode.innerText = '' o domNode.textContent = '' para eliminar los nodos de texto? – tjscience