¿Cuál es la diferencia entre textContenty innerTexten JavaScript?
¿Puedo usar textContentlo siguiente:
var logo$ = document.getElementsByClassName('logo')[0];
logo$.textContent = "Example";
javascript
JK
fuente
fuente

innerTextytextContentdecididamente no son lo mismo. Las ocurrencias de espacios en blanco en el contenido del nodo harán que las dos propiedades produzcan contenido diferente, y también lo harán las ocurrencias debrelementos y otros descendientes representados a nivel de bloque.Respuestas:
Ninguna de las otras respuestas tiene éxito en proporcionar la explicación completa, de ahí esta. Las diferencias clave entre
innerTextytextContentse describen muy bien en la publicación de blog de Kelly Norton: innerText vs. textContent . A continuación puede encontrar un resumen:innerTextno era estándar, mientras quetextContentse estandarizó antes.innerTextdevuelve el texto visible contenido en un nodo, mientras quetextContentdevuelve el texto completo . Por ejemplo, en el siguiente HTML<span>Hello <span style="display: none;">World</span></span>,innerTextdevolverá 'Hola', mientrastextContentque devolverá 'Hola mundo'. Para obtener una lista más completa de las diferencias, consulte la tabla en http://perfectionkills.com/the-poor-misunderstood-innerText/ (la lectura adicional en 'innerText' funciona en IE, pero no en Firefox ).innerTextrequiere mucho más rendimiento: requiere información de diseño para devolver el resultado.innerTextse define solo paraHTMLElementobjetos, mientras quetextContentse define para todos losNodeobjetos.Una solución alternativa para
textContentIE8 implicaría una función recursivanodeValueen todoschildNodeslos nodos especificados, aquí hay una prueba en un polyfill:fuente
innerTextconvertirá los<br>elementos en caracteres de nueva línea, mientrastextContentque los ignorará. Por lo tanto, 2 palabras con solo un<br>elemento entre ellas (y sin espacios) se concatenarán cuando se usetextContentelem.textContent = 'foobar'vselem.innerText = 'foobar'innerTextytextContent: si cambia eltext-transformelemento de un elemento por CSS, afectará el resultado de 'innerText', pero no el resultado detextContent. Por ejemplo:innerTextde<div style="text-transform: uppercase;">Hello World</div>será "HOLA MUNDO", mientrastextContentque será "Hola Mundo".textContentes el único disponible para nodos de texto:En los nodos de elementos,
innerTextevalúa <br> elementos, mientrastextContentevalúa los caracteres de control:span.innerTextda:span.textContentda:Las cadenas con caracteres de control (p. Ej., Saltos de línea) no están disponibles con
textContent, si el contenido se configuró coninnerText. A la inversa (establecer caracteres de control contextContent), todos los caracteres se devuelven coninnerTextytextContent:fuente
Tanto
innerTextytextContentestán estandarizados a partir de 2016. Todos losNodeobjetos (incluyendo los nodos de texto puro) tienentextContent, pero sólo losHTMLElementobjetos tieneninnerText.Si bien
textContentfunciona con la mayoría de los navegadores, no funciona en IE8 o versiones anteriores. Use este polyfill para que funcione solo en IE8. Este polyfill no funcionará con IE7 o versiones anteriores.El
Object.definePropertymétodo está disponible en IE9 o superior, sin embargo, está disponible en IE8 solo para objetos DOM.https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/defineProperty
https://developer.mozilla.org/en-US/docs/Web/API/Node/textContent
fuente
innerTextes tu amigo.Object.defineProperty()?Para aquellos que buscaron en Google esta pregunta y llegaron aquí. Siento que la respuesta más clara a esta pregunta está en el documento MDN: https://developer.mozilla.org/en-US/docs/Web/API/Node/textContent .
Puedes olvidar todos los puntos que pueden confundirte, pero recuerda 2 cosas:
textContentgeneralmente es la propiedad que está buscando.innerTextaproxima al texto que obtendría el usuario si resaltara el contenido del elemento con el cursor y luego lo copiara al portapapeles. YtextContentle da todo, visibles u ocultos, incluyendo<script>y<style>elementos.fuente
textContent es compatible con la mayoría de los navegadores. No es compatible con ie8 o anterior, pero se puede usar un polyfill para esto
Ver http://www.w3schools.com/jsref/prop_node_textcontent.asp
fuente
textContent devuelve texto completo y no le importa la visibilidad, mientras que innerText sí.
Salida de contenido de texto:
Salida de innerText (observe cómo innerText es consciente de las etiquetas como
<br>, e ignora el elemento oculto):fuente
Además de todas las diferencias que se mencionaron en las otras respuestas, aquí hay otra que descubrí recientemente:
Aunque
innerTextse dice que la propiedad ha sido estandarizada desde 2016, exhibe diferencias entre los navegadores: Mozilla ignora los caracteres U + 200E y U + 200F ("lrm" y "rlm")innerText, mientras que Chrome no.Firefox informa 3 y 2, Chrome informa 3 y 3.
Todavía no estoy seguro si esto es un error (y si es así, en qué navegador) o solo una de esas incompatibilidades peculiares con las que tenemos que vivir.
fuente
innerHTML ejecutará incluso las etiquetas HTML que pueden ser peligrosas y causar cualquier tipo de ataque de inyección del lado del cliente como XSS basado en DOM. Aquí está el fragmento de código:
Si usa .textContent, no evaluará las etiquetas HTML e imprimirá como String.
Referencia: https://www.scip.ch/en/?labs.20171214
fuente