Lo más probable es que no necesites esa función. Dado que su código ya está en el navegador *, puede acceder al DOM directamente en lugar de generar y codificar HTML que el navegador tendrá que decodificar hacia atrás para que se use realmente.
Use la innerText
propiedad para insertar texto sin formato en el DOM de manera segura y mucho más rápida que con cualquiera de las funciones de escape presentadas. Incluso más rápido que asignar una cadena estática precodificada a innerHTML
.
Se usa classList
para editar clases, dataset
para establecer data-
atributos y setAttribute
para otros.
Todos estos se encargarán de escapar por ti. Más precisamente, no se necesita escapar y no se realizará ninguna codificación debajo de **, ya que está trabajando con HTML, la representación textual de DOM.
// use existing element
var author = 'John "Superman" Doe <john@example.com>';
var el = document.getElementById('first');
el.dataset.author = author;
el.textContent = 'Author: '+author;
// or create a new element
var a = document.createElement('a');
a.classList.add('important');
a.href = '/search?q=term+"exact"&n=50';
a.textContent = 'Search for "exact" term';
document.body.appendChild(a);
// actual HTML code
console.log(el.outerHTML);
console.log(a.outerHTML);
.important { color: red; }
<div id="first"></div>
* Esta respuesta no está destinada a usuarios de JavaScript del lado del servidor (Node.js, etc. )
** A menos que lo conviertas explícitamente a HTML real después. Por ejemplo, al acceder innerHTML
: esto es lo que sucede cuando ejecuta $('<div/>').text(value).html();
sugerido en otras respuestas. Entonces, si su objetivo final es insertar algunos datos en el documento, al hacerlo de esta manera, hará el trabajo dos veces. También puede ver que en el HTML resultante no todo está codificado, solo el mínimo necesario para que sea válido. Se realiza en función del contexto, es por eso que este método jQuery no codifica comillas y, por lo tanto, no debe usarse como un escapista de propósito general. Se necesita el escape de cotizaciones cuando construye HTML como una cadena con datos que no son de confianza o que contienen comillas en el lugar del valor de un atributo. Si usa la API DOM, no tiene que preocuparse por escapar en absoluto.