Si tengo un lapso, di:
<span id="myspan"> hereismytext </span>
¿Cómo uso JavaScript para cambiar "hereismytext" a "newtext"?
javascript
html
usuario105033
fuente
fuente
textContent
, de modo que se aliente a las personas nuevas a usar métodos adecuados y seguros?Usando innerHTML está tanto no está indicada . En su lugar, debe crear un TextNode. De esta manera, está "vinculando" su texto y no es, al menos en este caso, vulnerable a un ataque XSS.
La direccion correcta:
Para obtener más información sobre esta vulnerabilidad: Cross Site Scripting (XSS) - OWASP
Editado el 4 de noviembre de 2017:
Tercera línea de código modificada de acuerdo con la sugerencia de @mumush : "use appendChild (); en su lugar".
Por cierto, según @Jimbo Jonny , creo que todo debería tratarse como una entrada del usuario aplicando el principio de Seguridad por capas. De esa manera no encontrarás sorpresas.
fuente
innerHTML
requerir precaución, tenga en cuenta que su solución usa loinnerText
que no es compatible con Firefox. quirksmode.org/dom/html También utiliza lotextContent
que no es compatible con IE8. Puede estructurar el código para solucionar estos problemas.span.appendChild(txt);
lugar!innerHTML
no se recomienda es ridícula. Sin mencionar que todavía está bien una vez desinfectado. La idea de que uno debe desinfectar la entrada del usuario NO ESTÁ RELACIONADA con esta pregunta específica. Como máximo, merece una pequeña nota al final que diga "por cierto: si es entrada del usuario, asegúrese de desinfectar primero o usar el método X que no lo necesita" .span.innerHTML = "";
entonces agregar niño?fuente
EDITAR: Esto fue escrito en 2014. Probablemente ya no te importe IE8 y puedas olvidarte de usarlo
innerText
. Solo úsalotextContent
y listo, hurra.Si usted es el que proporciona el texto y el usuario (o alguna otra fuente que no controla) no proporciona ninguna parte del texto, entonces la configuración
innerHTML
puede ser aceptable:Sin embargo, como otros señalan, si usted no es la fuente de ninguna parte de la cadena de texto, el uso
innerHTML
puede someterlo a ataques de inyección de contenido como XSS si no tiene cuidado de desinfectar correctamente el texto primero.Si está utilizando la entrada del usuario, aquí hay una forma de hacerlo de forma segura y al mismo tiempo mantener la compatibilidad entre navegadores:
Firefox no es compatible
innerText
e IE8 no es compatible,textContent
por lo que debe usar ambos si desea mantener la compatibilidad entre navegadores.Y si desea evitar los reflujos (causados por
innerText
) cuando sea posible:fuente
Yo uso
Jquery
y ninguno de los anteriores ayudó, no sé por qué, pero esto funcionó:fuente
Aquí hay otra forma:
Safari, Google Chrome y MSIE detectarán la propiedad innerText. Para Firefox, la forma estándar de hacer las cosas era usar textContent pero desde la versión 45 también tiene una propiedad innerText, ya que alguien me informó amablemente recientemente. Esta solución prueba para ver si un navegador admite cualquiera de estas propiedades y, de ser así, asigna el "nuevo texto".
Demostración en vivo: aquí
fuente
Además de las respuestas de JavaScript puro anteriores, puede usar el método de texto jQuery de la siguiente manera:
Si necesita extender la respuesta para obtener / cambiar el contenido html de un elemento span o div, puede hacer esto:
Referencias
.text (): http://api.jquery.com/text/
.html (): http://api.jquery.com/html/
fuente
También puede usar el método querySelector (), suponiendo que la identificación 'myspan' es única ya que el método devuelve el primer elemento con el selector especificado:
desarrollador.mozilla
fuente
Como en otras respuestas, innerHTML e innerText no se recomiendan, es mejor usar textContent . Este atributo está bien soportado, puede verificarlo aquí: http://caniuse.com/#search=textContent
fuente
esto seleccionará dom-node con id
myspan
y cambiará el contenido de texto anew text
fuente
Tu puedes hacer
fuente
Para este lapso
Puedes ir así: -
fuente