当我这样做:
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看起来相同。这是正常的吗?
.wrap
正在使用myUl
的克隆,而不是像.append
那样的原始。
当您考虑在具有多个元素的jQuery对象上调用.wrap
时,将每个元素包装在您传递的任何内容的单独副本中,这是有道理的。
更新:根据您的其他评论,我认为您想要做的是:
myLi = $(document.createElement("li"));
myLi.wrap('<ul>');
这个(或类似的代码)将使用动态创建的新UL包装现有元素。
而不是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)
来自文档:
“.wrap()函数可以接受任何可以传递给$()工厂函数的字符串或对象来指定一个DOM结构。这个结构可以嵌套几个层次,但是应该只包含一个inmost元素。”
你是不是包装了一个<li>
?