Provavelmente, você não precisa dessa função. Como seu código já está no navegador *, você pode acessar o DOM diretamente, em vez de gerar e codificar HTML, que precisará ser decodificado para trás pelo navegador para ser realmente usado.
Use a innerText
propriedade para inserir texto sem formatação no DOM com segurança e muito mais rápido do que usar qualquer uma das funções de escape apresentadas. Ainda mais rápido do que atribuir uma sequência pré-codificada estática parainnerHTML
.
Use classList
para editar classes, dataset
definir data-
atributos esetAttribute
para outros.
Todos estes irão lidar com a fuga para você. Mais precisamente, não é necessário escapar e nenhuma codificação será executada por baixo **, pois você está trabalhando em torno do HTML, a representação textual do 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 resposta não se destina a usuários JavaScript do servidor (Node.js, etc.) )
** A menos que você o converta explicitamente em HTML real posteriormente. Por exemplo, acessando innerHTML
- é o que acontece quando você executa $('<div/>').text(value).html();
sugestões em outras respostas. Portanto, se seu objetivo final é inserir alguns dados no documento, dessa maneira, você fará o trabalho duas vezes. Além disso, você pode ver que no HTML resultante nem tudo é codificado, apenas o mínimo necessário para que seja válido. Isso é feito de acordo com o contexto, é por isso que esse método jQuery não codifica aspas e, portanto, não deve ser usado como um escaper de uso geral. O escape de aspas é necessário quando você está construindo HTML como uma sequência com dados não confiáveis ou contendo aspas no lugar do valor de um atributo. Se você usa a API do DOM, não precisa se preocupar em escapar.