Хотя это очень старый вопрос, я подумал, что было бы неплохо обновить его свежей информацией;
Начиная с jQuery 1.8 существует функция jQuery.parseHTML () , которая теперь является предпочтительным способом создания элементов. Кроме того, существуют некоторые проблемы с анализом HTML через $('(html code goes here)')
, например, официальный веб-сайт jQuery упоминает следующее в одной из своих заметок о выпуске :
Расслабленный HTML-разбор: у вас снова могут быть начальные пробелы или
переводы строк перед тегами в $ (htmlString). Мы по-прежнему настоятельно рекомендуем
вы используете $ .parseHTML () при разборе HTML, полученного из внешнего
источники, и, возможно, вносит дальнейшие изменения в синтаксический анализ HTML в
будущее.
Для связи с актуальным вопросом, приведенный пример можно перевести на:
this.$OuterDiv = $($.parseHTML('<div></div>'))
.hide()
.append($($.parseHTML('<table></table>'))
.attr({ cellSpacing : 0 })
.addClass("text")
)
;
, который, к сожалению, менее удобен, чем просто $()
, но дает вам больше контроля, например, вы можете исключить теги сценариев (при этом встроенные сценарии останутся такими, как 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>]
Кроме того, вот эталонный ответ из топ-ответа, адаптированный к новой реальности:
JSbin Link
jQuery 1.9.1
$.parseHTML: 88ms
$($.parseHTML): 240ms
<div></div>: 138ms
<div>: 143ms
createElement: 64ms
Похоже, parseHTML
гораздо ближе к createElement
, чем $()
, но все ускорение исчезло после переноса результатов в новый объект jQuery