Minha postagem original apresentava DOMParser
, uma API JavaScript para conversão de strings HTML
em nós DOM. Enquanto DOMParser
funcione bem na maioria dos casos, essa API tem algumas
e não é tão eficiente quanto outra API: ContextualFragment
. Eu reescrevi
esta postagem para destacar ContextualFragment
, mas se o senhor ainda quiser saber mais sobre
DOMParser
, por favor, veja o texto original no final deste post.
Não faz muito tempo que os navegadores estavam estagnados quando se tratava de implementar novas APIs e recursos, o que levou ao surgimento do MooTools (FTW), jQuery, Dojo Toolkit, Prototype e outros kits de ferramentas JavaScript. Em seguida, começamos a fazer mais renderização no lado do cliente e fomos forçados a usar uma variedade de truques para lidar com modelos, incluindo strings HTML massivas em nosso JavaScript e até mesmo abusando do <script>
para manter nossos modelos.
É claro que, depois de colocar o conteúdo no modelo, você precisa transformar essa string em nós DOM, e esse processo tem alguns truques próprios, como a criação de um <div>
fora da tela, definindo seu innerHTML
para o valor da string, pegando o firstChild
e movendo o nó para o nó desejado. Cada kit de ferramentas JavaScript usaria sua própria estratégia para converter a cadeia de caracteres em DOM, destacando a necessidade de um método padrão para realizar essa tarefa.
Hoje, há uma maneira pouco conhecida (mas padrão) de converter string em DOM com JavaScript: ContextualFragment
.
Eu falei sobre DocumentFragment
para criar
e armazenar nós DOM para desempenho no passado, mas essa postagem ilustrou a criação de elementos via
document.createElement
:
// Use a DocumentFragment to store and then mass inject a list of DOM nodes var frag = document.createDocumentFragment(); for(var x = 0; xTo create DOM nodes from a string of HTML we'll use
document.createRange().createContextualFragment
:let frag = document.createRange().createContextualFragment('One
Two
'); console.log(frag); /* #document-fragmentOne
Two
*/
DocumentFragment
compartilham a maioria dos métodos que osNodeList
objetos
têm, portanto, o senhor pode usar métodos típicos do DOM, comoquerySelector
equerySelectorAll
bem como propriedades de travessia do DOM, comofirstChild
com o resultadoDocumentFragment
:
let firstChild = frag.firstChild; let firstDiv = frag.querySelector('div'); let allDivs = frag.querySelectorAll('div');
Quando estiver pronto para injetar todos os nós DOM criados, o senhor pode simplesmente executar:
// "placementNode" will be the parent of the nodes within the DocumentFragment placementNode.appendChild(frag);
O senhor também pode injetar nós um de cada vez:
placementNode.appendChild(frag.firstChild);
O
document.createRange().createContextualFragment
é um método incrível e sensato para converter strings em nós DOM no JavaScript. Abandone seus antigos shims e mude para essa API simples e de alto desempenho!
A postagem original:
DOMParser
Hoje, temos uma maneira padrão de converter string em DOM com JavaScript:
DOMParser
.
O JavaScript
Tudo o que o senhor precisa fazer é criar um
DOMParser
e usar sua instânciaparseFromString
method:
let doc = new DOMParser().parseFromString('<div><b>Hello!</b></div>', 'text/html');
Returned é um
document
contendo os nós gerados a partir de sua string. Com issodocument
o senhor pode usar os métodos padrão de passagem de nós para recuperar os nós que especificamos em nossa string:
let doc = new DOMParser().parseFromString('<div><b>Hello!</b></div>', 'text/html'); let div = doc.body.firstChild; let divs = doc.body.querySelectorAll('div');
O senhor não precisa de um único elemento de envolvimento como os componentes JSX: pode ter elementos irmãos:
let doc = new DOMParser().parseFromString('<div>1</div><div>2</div>', 'text/html'); let firstDiv = doc.body.firstChild; let secondDiv = firstDiv.nextSibling;
Aqui está uma função simples de empacotamento para
DOMParser
para recuperar os nós:
let getNodes = str => new DOMParser().parseFromString(str, 'text/html').body.childNodes; let nodes = getNodes('<div>1</div><div>2</div>'); // [div, div]
O
DOMParser
é um método incrível e sensato para converter strings em nós DOM no JavaScript. Abandone seus antigos shims e mude para essa API simples e eficiente!