Embora essa seja uma pergunta muito antiga, pensei que seria bom atualizá-la com informações recentes;
Desde o jQuery 1.8, existe uma função jQuery.parseHTML () que agora é a maneira preferida de criar elementos. Além disso, há alguns problemas na análise de HTML por $('(html code goes here)')
exemplo, o site oficial do jQuery menciona o seguinte em uma de suas notas de versão :
Análise de HTML relaxada: Você pode novamente ter espaços à esquerda ou novas linhas antes das tags em $ (htmlString). Ainda recomendamos enfaticamente que você use $ .parseHTML () ao analisar o HTML obtido de fontes externas e poderá fazer novas alterações na análise de HTML no futuro.
Para se relacionar com a pergunta real, o exemplo fornecido pode ser traduzido para:
this.$OuterDiv = $($.parseHTML('<div></div>'))
.hide()
.append($($.parseHTML('<table></table>'))
.attr({ cellSpacing : 0 })
.addClass("text")
)
;
que, infelizmente, é menos conveniente do que usar apenas $()
, mas oferece mais controle; por exemplo, você pode optar por excluir as tags de script (isso deixará os scripts embutidos como se onclick
fossem):
> $.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>]
Além disso, aqui está uma referência da resposta principal ajustada à nova realidade:
Link JSbin
jQuery 1.9.1
$ .parseHTML: 88ms
$ ($. parseHTML): 240ms
<div> </div>: 138ms
<div>: 143ms
createElement: 64ms
Parece que parseHTML
está muito mais perto do createElement
que $()
, mas todo o aumento se foi depois de agrupar os resultados em um novo objeto jQuery