Chociaż jest to bardzo stare pytanie, pomyślałem, że byłoby miło zaktualizować je o najnowsze informacje;
Od jQuery 1.8 dostępna jest funkcja jQuery.parseHTML (), która jest obecnie preferowanym sposobem tworzenia elementów. Ponadto istnieją pewne problemy z analizowaniem kodu HTML za pośrednictwem $('(html code goes here)')
, na przykład na oficjalnej stronie jQuery w następujących uwagach do wydania :
Zrelaksowana parsowanie HTML: Możesz ponownie mieć spacje lub znaki nowej linii przed tagami w $ (htmlString). Nadal zdecydowanie zalecamy używanie $ .parseHTML () podczas analizowania HTML uzyskanego ze źródeł zewnętrznych i może w przyszłości wprowadzać dalsze zmiany w analizie HTML.
Aby odnieść się do rzeczywistego pytania, podany przykład można przetłumaczyć na:
this.$OuterDiv = $($.parseHTML('<div></div>'))
.hide()
.append($($.parseHTML('<table></table>'))
.attr({ cellSpacing : 0 })
.addClass("text")
)
;
co jest niestety mniej wygodne niż używanie samego $()
, ale daje większą kontrolę, na przykład możesz wykluczyć tagi skryptu (pozostawi skrypty wbudowane, jak onclick
chociaż):
> $.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>]
Oto punkt odniesienia od najwyższej odpowiedzi dostosowanej do nowej rzeczywistości:
JSbin Link
jQuery 1.9.1
$ .parseHTML: 88ms
$ ($. parseHTML): 240ms
<div> </div>: 138ms
<div>: 143ms
createElement: 64ms
Wygląda na to, że parseHTML
jest znacznie bliżej createElement
niż $()
, ale wszystkie wzmocnienia zniknęły po zawinięciu wyników w nowym obiekcie jQuery