¿Cuál es la diferencia entre textContent
y innerText
en JavaScript?
¿Puedo usar textContent
lo siguiente:
var logo$ = document.getElementsByClassName('logo')[0];
logo$.textContent = "Example";
javascript
JK
fuente
fuente
innerText
ytextContent
decididamente 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 debr
elementos 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
innerText
ytextContent
se describen muy bien en la publicación de blog de Kelly Norton: innerText vs. textContent . A continuación puede encontrar un resumen:innerText
no era estándar, mientras quetextContent
se estandarizó antes.innerText
devuelve el texto visible contenido en un nodo, mientras quetextContent
devuelve el texto completo . Por ejemplo, en el siguiente HTML<span>Hello <span style="display: none;">World</span></span>
,innerText
devolverá 'Hola', mientrastextContent
que 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 ).innerText
requiere mucho más rendimiento: requiere información de diseño para devolver el resultado.innerText
se define solo paraHTMLElement
objetos, mientras quetextContent
se define para todos losNode
objetos.Una solución alternativa para
textContent
IE8 implicaría una función recursivanodeValue
en todoschildNodes
los nodos especificados, aquí hay una prueba en un polyfill:fuente
innerText
convertirá los<br>
elementos en caracteres de nueva línea, mientrastextContent
que los ignorará. Por lo tanto, 2 palabras con solo un<br>
elemento entre ellas (y sin espacios) se concatenarán cuando se usetextContent
elem.textContent = 'foobar'
vselem.innerText = 'foobar'
innerText
ytextContent
: si cambia eltext-transform
elemento de un elemento por CSS, afectará el resultado de 'innerText', pero no el resultado detextContent
. Por ejemplo:innerText
de<div style="text-transform: uppercase;">Hello World</div>
será "HOLA MUNDO", mientrastextContent
que será "Hola Mundo".textContent
es el único disponible para nodos de texto:En los nodos de elementos,
innerText
evalúa <br> elementos, mientrastextContent
evalúa los caracteres de control:span.innerText
da:span.textContent
da: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 coninnerText
ytextContent
:fuente
Tanto
innerText
ytextContent
están estandarizados a partir de 2016. Todos losNode
objetos (incluyendo los nodos de texto puro) tienentextContent
, pero sólo losHTMLElement
objetos tieneninnerText
.Si bien
textContent
funciona 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.defineProperty
mé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
innerText
es 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:
textContent
generalmente es la propiedad que está buscando.innerText
aproxima al texto que obtendría el usuario si resaltara el contenido del elemento con el cursor y luego lo copiara al portapapeles. YtextContent
le 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
innerText
se 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