Создание новых элементов на jQuery можно осуществить несколькими путями. Самый простой из них, это использовать функцию append() (прибавить). Предположим, что у нас есть некий DIV, внутри которого тоже есть пара элементов, и необходимо создать ещё один, третий.
<div id="main"> <div id="first"></div> <div id="second"></div> </div>
Если необходимо создать пустой DIV:
$(''#main'').append(''<div />'');
Если необходимо создать элемент с заданными атрибутами или текстом:
$(''#main'').append(''<div id="third">Третий</div>'');
Поскольку в родительском контейнере уже есть несколько элементов, то новый элемент будет в конец родителя, то есть после second:
<div id="main"> <div id="first"></div> <div id="second"></div> <div id="third">Третий</div> </div>
Можно пойти и другим путём, использовав немножко другую функцию, которая называется appendTo() (добавить к). Её отличие в том, что она вызывается не с родительского элемента, а с того, который будет добавлен. То есть эта функция как бы противоположна предыдущей. Результат выполнения следующего кода будет полностью идентичен предыдущему:
$(''<div id="third">Третий</div>'').appendTo(''#main'');
В чём же отличия, спросите Вы? Разница между append() и appendTo() заключается в логике цепочки вызовов. Многие функции jQuery возвращают объект типа jQuery для того, чтобы можно было удобно и компактно продолжить выполнять действия над ними. Взгляните на следующие 2 случая:
// Случай 1 $(''#main'').append(''<div id="third">Третий</div>'').css(''background'', ''red''); // Случай 2 $(''<div id="third">Третий</div>'').appendTo(''#main'').css(''background'', ''red'');
В первом случае функция append() вернёт объект с ID main, то есть родителя, а затем именно к нему будет прибавлено новое CSS-свойство. Во втором случае функция appendTo() будет возвращать новосозданный элемент, и CSS-свойство будет применено только к нему.
Имейте ввиду, что описанными выше функциями можно не только создавать, а и перемещать уже существующие элементы, например, от одного родителя к другому. Пусть есть следующий HTML:
<div id="main"> <div id="first"></div> <div id="second"></div> <div id="third"></div> <div id="fourth"></div> </div>
Если мы хотим переместить 4-й элемент внутрь третьего, выполнить следующий код:
$(''#fourth'').appendTo(''#third'');
Получим:
<div id="main"> <div id="first"></div> <div id="second"></div> <div id="third"><div id="fourth"></div></div> </div>
Как мы выяснили, используя 2 предыдущие функции, можно создать элемент А и поместить его внутрь элемента Б, при этом А помещается в конец Б и становиться его последним дочерним элементом. Функции prepend() и prependTo() поступают наоборот: они делают элемент А первым из дочерних элементов родителя Б, то есть помещают его в начало Б. Если у нас есть такой HTML-код:
<div id="main"> <div id="first">Первый</div> <div id="second">Второй</div> </div>
Выполним такой JavaScript:
$(''#main'').prepend(''<div id="zero">Нулевой</div>'');
Получим:
<div id="main"> <div id="zero">Нулевой</div> <div id="first">Первый</div> <div id="second">Второй</div> </div>
Функции, рассмотрены ранее, создают или перемещают элементы либо в начало, либо в конец родительского контейнера. Если необходимо поместить объект в заданное место, перед или после другого объекта, тогда можно использовать такие функции:
Пусть имеется такой HTML:
<div id="main"> <div id="first">Первый</div> <div id="second">Второй</div> </div>
Если мы хотим создать какой-либо элемент и поместить его после first и перед second, а затем, к примеру, раскрасить его в зелёный цвет, тогда можно пойти двумя идентичными путями:
// Вариант 1 $(''<div id="one-and-half">Полтора</div>'').insertAfter(''#first'').css(''background'',''green''); // Вариант 2 $(''<div id="one-and-half">Полтора</div>'').insertBefore(''#second'').css(''background'',''green'');
Если требуется создать объект, например, перед first и затем раскрасить first в зеленый цвет:
$(''#first'').before(''<div id="one-and-half">Полтора</div>'').css(''background'',''green'');
Я думаю, логика понятна, ничего сложного нет.
Если новосозданному элементу необходимо задать несколько свойств или «повесить» на него несколько обработчиков событий, то более удобным синтаксисом для создания элементов может оказаться следующий:
$("<div/>", { "class": "clickme", text: "Нажми на меня!", click: function(){ $(this).html(''Спасибо.''); } }).appendTo("body");