Предпочтительный способ создания нового элемента с помощью jQuery

У меня есть 2 способа, которыми я могу создать <div> с помощью jQuery,

Или:

var div = $("<div></div>");
$("#box").append(div);

Или же:

$("#box").append("<div></div>");

Каковы недостатки использования второго способа, кроме повторного использования?

8 ответов

Решение

Первый вариант дает вам больше гибкости:

var $div = $("<div>", {id: "foo", "class": "a"});
$div.click(function(){ /* ... */ });
$("#box").append($div);

И конечно .html('*') переопределяет содержимое в то время как .append('*') нет, но я думаю, это был не твой вопрос.

Еще одна хорошая практика - префикс ваших переменных jQuery с помощью $:
Есть ли какая-то конкретная причина использования $ с переменной в jQuery

Размещение цитат по всему "class" Имя свойства сделает его более совместимым с менее гибкими браузерами.

Я лично считаю, что для кода важнее быть читаемым и редактируемым, чем исполнителем. Который из них вам удобнее смотреть, и он должен быть тем, который вы выбрали для вышеуказанных факторов. Вы можете написать это как:

$('#box').append(
  $('<div/>')
    .attr("id", "newDiv1")
    .addClass("newDiv purple bloated")
    .append("<span/>")
      .text("hello world")
);

И ваш первый метод как:

// create an element with an object literal, defining properties
var $e = $("<div>", {id: "newDiv1", name: 'test', class: "aClass"});
$e.click(function(){ /* ... */ });
// add the element to the body
$("#box").append($e);

Но насколько читаемость идет; Подход JQuery мой любимый. Следуйте этой полезной уловке, заметкам и рекомендациям jQuery

Гораздо более выразительным образом,

jQuery('<div/>', {
    "id": 'foo',
    "name": 'mainDiv',
    "class": 'wrapper',
    "click": function() {
      jQuery(this).toggleClass("test");
    }}).appendTo('selector');

Ссылка: Документы

Согласно официальной документации jQuery

Чтобы создать элемент HTML, $("<div/>") или же $("<div></div>") является предпочтительным.

Тогда вы можете использовать либо appendTo, append, before, after и так далее,. вставить новый элемент в DOM.

PS: jQuery версия 1.11.x

Согласно документации для 3.4, предпочтительно использовать атрибуты сattr() метод.

$('<div></div>').attr(
  {
    id: 'some dynanmic|static id',
    "class": 'some dynanmic|static class'
  }
).click(function() {
  $( "span", this ).addClass( "bar" ); // example from the docs
});

У меня есть новая идея, используя .html(content)

Вы можете поставить пустой <div></div> ранее в том месте, где вы хотите, не забудьте установить идентификатор для этого DIV.

После этого используйте $("#divId").html(content) заменить пустой DIV новым контентом, который вы хотите добавить.

Также возможно создать элемент div следующим образом:
var my_div = document.createElement('div');
добавить класс
my_div.classList.add('col-10');
также может выполнять append() и appendChild()

Я бы порекомендовал первый вариант, где вы на самом деле строите элементы, используя jQuery. второй подход просто устанавливает свойство innerHTML элемента в строку, которая оказывается HTML, более подвержена ошибкам и менее гибка.

Если #box пусто, ничего, но если это не так, они делают совершенно разные вещи. Бывший добавит div как последний дочерний узел #box, Последний полностью заменяет содержимое #box с одним пустым div, текст и все.

Другие вопросы по тегам