Tengo una lista desplegable que está poblada por Javascript.
Al decidir cuál debería ser el valor predeterminado para mostrar en la carga, me di cuenta de que las siguientes propiedades mostraban exactamente los mismos valores:
innerText
innerHtml
label
text
textContent
outerText
Mi propia investigación muestra pruebas de marcado de banco o comparaciones entre algunas de ellas, pero no todas.
Puedo usar mi propio sentido común y elegir 1 u otro, ya que proporcionan el mismo resultado, pero me preocupa que esta no sea una buena idea si los datos cambian.
Mis hallazgos son:
innerText
mostrará el valor como está e ignora cualquier formato HTML que pueda estar incluidoinnerHTML
mostrará el valor y aplicará cualquier formato HTMLlabel
parece ser igual queinnerText
, así que no puedo ver la diferenciatext
parece ser el mismoinnerText
pero la versión abreviada de jQuerytextContent
parece igualinnerText
pero sigue formateando (como\n
)outerText
parece ser lo mismo queinnerText
Mi investigación solo puede llevarme tan lejos como yo solo puedo probar lo que puedo pensar o leer lo que se publica, ¿alguien puede confirmar si mi investigación es correcta y si hay algo especial sobre label
y outerText
?
javascript
html
dom
MyDaftQuestions
fuente
fuente
.text()
para obtener el contenido de texto de un elemento, ya que eso proporcionará la máxima compatibilidad entre navegadores.Respuestas:
De MDN :
Por
innerText
lo tanto , no incluirá texto oculto por CSS, pero lotextContent
hará.En caso de que se ha perdido, permítanme repetir con más claridad: Do no utilizar
.innerHTML
a menos que pretenda específicamente para inserción dentro de un elemento HTML y han tomado las precauciones necesarias para garantizar que el código HTML está insertando no puede contener contenido malicioso. Si solo desea insertar texto, use.textContent
o si necesita admitir IE8 y versiones anteriores, use la detección de funciones para desactivar.textContent
y.innerText
.Una razón principal por la que hay tantas propiedades diferentes es que los diferentes navegadores originalmente tenían diferentes nombres para estas propiedades, y todavía no hay soporte completo para todos los navegadores cruzados. Si está utilizando jQuery, debe atenerse a
.text()
ya que está diseñado para suavizar las diferencias entre navegadores. *Para algunos de los otros:
outerHTML
es básicamente lo mismo queinnerHTML
, excepto que incluye las etiquetas de inicio y fin del elemento al que pertenece. Parece que no puedo encontrar mucha descripción deouterText
nada. Creo que esa es probablemente una propiedad heredada oscura y debería evitarse.fuente
in order to retrieve or write text within an element, people use innerHTML. textContent should be used instead
, es que textContent no es compatible con IE 8, que todavía está en uso bastante extendido porque esa es la versión incluida con Windows 7. Y FireFox no es compatible con innerText . Entonces, aunque innerHTML no es ideal para el propósito, tiene una mejor confiabilidad entre navegadores..textContent
y.innerText
, o usar algo como jQuery que suaviza estas diferencias de navegador.textContent
con etiquetas HTML. Si necesita insertar HTML, usaría.innerHTML
o construiría nodos HTML usandodocument.createElement()
, etc.innerHTML
(a diferencia detextContent
) puede abrir la puerta a ataques XSS (Cross-Site Scripting) en su aplicación. Si el contenido que se inserta en el DOM víainnerHTML
no es completamente confiable, un atacante podría usar un<script>
elemento para secuestrar su aplicación autenticada bajo el nivel de autorización de un usuario o administrador. Todos los ataques, incluidos los ataques de aspecto extraño<img src="x.x" onerror="alert('Hacked!');"/>
y una miríada de ataques más furtivos, se destruyen de manera efectiva simplemente usandotextContent
en este contexto en lugar del peligrosoinnerHTML
.Una lista desplegable comprende una colección de
Option
objetos, por lo que debe usar la.text
propiedad para inspeccionar la representación textual del elemento, es decirPor cierto,
Eso no es correcto;
$(element).text()
es la versión de jQuery, mientras queelement.text
es la versión de acceso a la propiedad.fuente
Anexo a la excelente respuesta de JLRishe:
La razón por la que existen innerText y externalText es por la simetría con innerHTML y externalHTML. Esto se vuelve importante cuando asigna a la propiedad.
Supongamos que tiene un elemento
e
con código HTML<b>Lorem Ipsum</b>
:fuente
textContent
no formateará (\ n)fuente
Consulte la compatibilidad de navegadores http://www.quirksmode.org/dom/html/ si está apuntando a navegadores específicos. Porque parece que todos tienen su propia forma de hacer las cosas. Es por eso que es mejor usar JQuery .text () ( http://api.jquery.com/text/ ) si no desea jugar.
fuente
text
ylabel
eliminar espacios extra. Obtuve estos resultados al consultar opciones en un menú desplegable:fuente