Aunque esta es una pregunta muy antigua, pensé que sería bueno actualizarla con información reciente;
Desde jQuery 1.8 hay una función jQuery.parseHTML () que ahora es una forma preferida de crear elementos. Además, hay algunos problemas con el análisis HTML a través de $('(html code goes here)')
, por ejemplo, el sitio web oficial de jQuery menciona lo siguiente en una de sus notas de lanzamiento :
Análisis HTML relajado: una vez más puede tener espacios iniciales o nuevas líneas antes de las etiquetas en $ (htmlString). Todavía le recomendamos encarecidamente que use $ .parseHTML () al analizar HTML obtenido de fuentes externas, y que en el futuro pueda realizar más cambios al análisis HTML.
Para relacionarse con la pregunta real, el ejemplo proporcionado podría traducirse a:
this.$OuterDiv = $($.parseHTML('<div></div>'))
.hide()
.append($($.parseHTML('<table></table>'))
.attr({ cellSpacing : 0 })
.addClass("text")
)
;
que desafortunadamente es menos conveniente que usar solo $()
, pero le da más control, por ejemplo, puede optar por excluir etiquetas de script (dejará scripts en línea como onclick
):
> $.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>]
Además, aquí hay un punto de referencia de la respuesta superior ajustada a la nueva realidad:
Enlace JSbin
jQuery 1.9.1
$ .parseHTML: 88ms
$ ($. parseHTML): 240 ms
<div> </div>: 138 ms
<div>: 143ms
createElement: 64ms
Parece que parseHTML
está mucho más cerca createElement
que $()
, pero todo el impulso se ha ido después de envolver los resultados en un nuevo objeto jQuery