Я рефакторинг старого кода JavaScript, и происходит много манипуляций с DOM.
var d = document;
var odv = d.createElement("div");
odv.style.display = "none";
this.OuterDiv = odv;
var t = d.createElement("table");
t.cellSpacing = 0;
t.className = "text";
odv.appendChild(t);
Я хотел бы знать, есть ли лучший способ сделать это с помощью jQuery. Я экспериментировал с:
var odv = $.create("div");
$.append(odv);
// And many more
Но я не уверен, что это лучше.
Ответы:
Вот ваш пример в строке «один».
Обновление : я думал, что обновлю этот пост, так как он все еще получает довольно мало трафика. В комментариях ниже есть некоторое обсуждение
$("<div>")
vs против$("<div></div>")
vs$(document.createElement('div'))
как способа создания новых элементов, и который является «лучшим».Я собрал небольшой тест , и вот примерные результаты повторения вышеупомянутых опций 100 000 раз:
jQuery 1.4, 1.5, 1.6
JQuery 1,3
JQuery 1.2
Я думаю, это не является большим сюрпризом, но
document.createElement
это самый быстрый метод. Конечно, прежде чем вы приступите к рефакторингу всей вашей кодовой базы, помните, что различия, о которых мы здесь говорим (во всех, кроме архаичных версиях jQuery), равняются дополнительным 3 миллисекундам на тысячу элементов .Обновление 2
Обновлен для jQuery 1.7.2 и поставил эталонный тест,
JSBen.ch
который, вероятно, немного более научен, чем мои примитивные тесты, плюс он может быть теперь краудсорсинг!http://jsben.ch/#/ARUtz
источник
$('div')
визуально очень похожего, но функционально отличающегося друг от друга.$(document.createElement('div'))
и должна быть самой быстрой?Простое указание HTML-элементов, которые вы хотите добавить в конструктор jQuery
$()
, вернет объект jQuery из недавно созданного HTML, который можно добавить в DOM с помощьюappend()
метода jQuery .Например:
Затем вы можете заполнить эту таблицу программно, если хотите.
Это дает вам возможность указать любой произвольный HTML, который вам нравится, включая имена классов или другие атрибуты, которые вы можете найти более краткими, чем использование,
createElement
а затем настройку таких атрибутов, какcellSpacing
иclassName
через JS.источник
$(htmlStr)
реализован какdocument.createElement("div").innerHTML = htmlStr
. Другими словами, он вызывает HTML-анализатор браузера. Неверно сформированный HTML по-разному ломается в IE по сравнению с другими браузерами.get
функция, которая возвращает собственный элемент DOM. (Я знаю, что эта тема старая, но я добавляю ее для справки. ;-))[dom element].appendChild($('<html>')[0]);
Создание новых элементов DOM является основной особенностью
jQuery()
метода, см .:источник
$('<a>')
не гуглится!Я делаю так:
источник
поскольку
jQuery1.8
использование$.parseHTML()
для создания элементов - лучший выбор.Есть два преимущества:
1.Если вы используете старый способ, который может быть чем-то вроде
$(string)
, jQuery проверит строку, чтобы убедиться, что вы хотите выбрать HTML-тег или создать новый элемент. Используя$.parseHTML()
, вы сообщаете jQuery, что хотите явно создать новый элемент, поэтому производительность может быть немного лучше.2. Гораздо важнее то, что вы можете пострадать от межсайтовой атаки ( больше информации ), если вы используете старый способ. если у вас есть что-то вроде:
плохой парень может
<script src="xss-attach.js"></script>
подшучивать над тобой. к счастью,$.parseHTML()
избежать этого смущения для вас:Тем не менее, обратите внимание, что
a
это объект jQuery, аb
элемент html:источник
parseHTML
он хорош для html, поступающего из внешних источников, но что « весь импульс исчез после упаковки результатов в новый объект jQuery ». То есть, если вы хотите жестко запрограммировать создание нового HTML-элемента в jQuery-$("<div>stuff</div>")
стиле , стиль, похоже, победит.ОБНОВИТЬ
Начиная с последних версий jQuery, следующий метод не назначает свойства, переданные во втором объекте
Предыдущий ответ
Я чувствую, что использование
document.createElement('div')
вместе сjQuery
быстрее:источник
Хотя это очень старый вопрос, я подумал, что было бы неплохо обновить его свежей информацией;
Начиная с jQuery 1.8 существует функция jQuery.parseHTML (), которая теперь является предпочтительным способом создания элементов. Кроме того, есть некоторые проблемы с анализом HTML через
$('(html code goes here)')
, например, официальный сайт jQuery упоминает следующее в одном из примечаний к выпуску :Для связи с конкретным вопросом приведенный пример можно перевести на:
что, к сожалению, менее удобно, чем использование just
$()
, но дает вам больший контроль, например, вы можете исключить теги сценария (он оставит встроенные сценарии, как,onclick
впрочем,):Кроме того, вот эталонный ответ из топ-ответа, адаптированный к новой реальности:
JSbin Link
JQuery 1.9.1
Похоже , что
parseHTML
гораздо ближе кcreateElement
чем$()
, но все импульс исчезает после того, как упаковка результатов в новый объект JQueryисточник
источник
Самый короткий / самый простой способ создать элемент DIV в jQuery.
источник
Я только что сделал для этого небольшой плагин jQuery: https://github.com/ern0/jquery.create
Это следует вашему синтаксису:
Идентификатор узла DOM может быть указан как второй параметр:
Это серьезно? Нет. Но этот синтаксис лучше чем $ ("<div> </ div>") , и это очень хорошее соотношение цены и качества.
Я новый пользователь jQuery, перехожу с DOMAssistant на аналогичную функцию: http://www.domassistant.com/documentation/DOMAssistantContent-module.php
Мой плагин проще, я думаю, что attrs и контент лучше добавлять с помощью цепочек методов:
Также это хороший пример для простого jQuery-плагина (сотого).
источник
Это все довольно просто! Вот пара быстрых примеров ...
источник
Не упоминалось в предыдущих ответах, поэтому я добавляю рабочий пример того, как создавать элементы элемента с последним jQuery, также с дополнительными атрибутами, такими как обратный вызов content, class или onclick:
источник
jQuery из коробки не имеет эквивалента createElement. Фактически большая часть работы jQuery выполняется внутренне с использованием innerHTML, а не чисто DOM-манипуляций. Как уже упоминал Адам, это то, как вы можете достичь подобных результатов.
Также доступны плагины, которые используют DOM вместо innerHTML, такие как appendDOM , DOMEC и FlyDOM, и это лишь некоторые из них. С точки зрения производительности нативный jquery по-прежнему наиболее производительный (в основном потому, что он использует innerHTML)
источник