Bien que ce soit une très vieille question, j'ai pensé qu'il serait bien de la mettre à jour avec des informations récentes;
Depuis jQuery 1.8, il existe une fonction jQuery.parseHTML () qui est maintenant un moyen préféré de créer des éléments. En outre, il y a quelques problèmes avec l'analyse HTML via $('(html code goes here)')
, par exemple le site Web officiel de jQuery mentionne ce qui suit dans l' une de leurs notes de version :
Analyse HTML détendue: vous pouvez à nouveau avoir des espaces de début ou des retours à la ligne avant les balises dans $ (htmlString). Nous vous conseillons toujours fortement d'utiliser $ .parseHTML () lors de l'analyse syntaxique du HTML obtenu à partir de sources externes, et nous apporterons peut-être d'autres modifications à l'analyse HTML à l'avenir.
Pour se rapporter à la question réelle, l'exemple fourni pourrait être traduit en:
this.$OuterDiv = $($.parseHTML('<div></div>'))
.hide()
.append($($.parseHTML('<table></table>'))
.attr({ cellSpacing : 0 })
.addClass("text")
)
;
ce qui est malheureusement moins pratique que d'utiliser simplement $()
, mais cela vous donne plus de contrôle, par exemple, vous pouvez choisir d'exclure les balises de script (cela laissera les scripts en ligne comme onclick
si):
> $.parseHTML('<div onclick="a"></div><script></script>')
[<div onclick="a"></div>]
> $.parseHTML('<div onclick="a"></div><script></script>', document, true)
[<div onclick="a"></div>, <script></script>]
En outre, voici un point de repère de la réponse du haut ajusté à la nouvelle réalité:
Lien JSbin
jQuery 1.9.1
$ .parseHTML: 88 ms
$ ($. parseHTML): 240 ms
<div> </div>: 138 ms
<div>: 143 ms
createElement: 64ms
Il semble être parseHTML
beaucoup plus proche createElement
que $()
, mais tout le boost est parti après avoir enveloppé les résultats dans un nouvel objet jQuery