метод wrap () и дочерние элементы - PullRequest
0 голосов
/ 05 января 2012

Когда я делаю это:

myUl = $(document.createElement("ul"));
myLi = $(document.createElement("li"));
myUl.append(myLi);

myLi становится дочерним элементом myUl. Это хорошо.

Когда я делаю это:

myUl = $(document.createElement("ul"));
myLi = $(document.createElement("li"));
myLi.wrap(myUl);

Тогда myUl имеет 0 дочерних элементов, хотя DOM выглядит так же. Это нормально?

Ответы [ 3 ]

1 голос
/ 05 января 2012

.wrap работает с клоном myUl вместо оригинала, как .append.

Это имеет смысл, если учесть, что вызов .wrap для объекта jQuery с несколькими элементамиЯ заверну каждый элемент в отдельную копию того, что вы передали.

ОБНОВЛЕНИЕ: Из ваших других комментариев я думаю, что вы хотите сделать следующее:

myLi = $(document.createElement("li"));
myLi.wrap('<ul>');

Это (или некоторый подобный код) обернет существующий элемент новым UL, созданным на лету.

0 голосов
/ 05 января 2012

Из документов:

"Функция .wrap () может принимать любую строку или объект, которые могут быть переданы фабричной функции $ (), чтобы указать структуру DOM. Эта структура может бытьвложенный в несколько уровней, но должен содержать только один внутренний элемент. "

http://api.jquery.com/wrap/

Вы упаковываете более одного <li>?

0 голосов
/ 05 января 2012

Вместо document.createElement, вы можете просто использовать $("<ul>") ... так, например:

$("<li>").wrap($("<ul>"));

Я бы использовал этот подход вместо того, чтобы пытаться обернуть ваш myLi в существующий объект myUl, например ...

var $li = $("<li>");

//added class for another short-hand example
$("<ul class='myClass'>").append($li);  

Допустим, у вас есть элемент на странице, и вы хотите обернуть его в только что созданный объект JS ...

var $ul = $("<ul>");  
$('#myLi').appendTo($ul)

//and if you want to clone it
$('#myLi').clone().appendTo($ul)
...