Aunque esta es una pregunta muy antigua, pensé que sería bueno actualizarla con información reciente;
Desde jQuery 1.8 hay un jQuery.parseHTML () función que ahora es una forma preferida de crear elementos. Además, hay algunos problemas con el análisis de 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 de HTML relajado: puede volver a tener espacios iniciales o nuevas líneas antes de las etiquetas en $ (htmlString). Aún así, le recomendamos encarecidamente que utilice $ .parseHTML () al analizar HTML obtenido de fuentes externas, y es posible que realice más cambios en el análisis de HTML en el futuro.
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 las etiquetas de secuencia de comandos (dejará secuencias de comandos en línea como onclick
aunque):
> $.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 principal ajustada a la nueva realidad:
Enlace JSbin
jQuery 1.9.1
$.parseHTML: 88ms $($.parseHTML): 240ms <div></div>: 138ms <div>: 143ms createElement: 64ms
Parece que parseHTML
está mucho más cerca de createElement
que $()
, pero todo el impulso desaparece después de envolver los resultados en un nuevo objeto jQuery