jQuery包装奇怪的行为

时间:2018-02-01 13:43:34

标签: jquery dom dom-manipulation

我写了一个代码,将两个现有元素包装成一个新元素。我的第一次尝试看起来像这样:

var $btn = $("button"),
    $ul = $btn.next("ul"),
    $div = $("<div></div>");

$btn.wrap($div);
$div.append($ul);

我惊讶地发现,在代码运行后,ul从DOM中消失了。 Fiddle

我能够解决它在divwrap之间选择append这样的$div = $btn.parent(); :{/ 3}}:

$btn.wrap($div).after($ul);

在Google中进行一些搜索后,我发现了Fiddle并将代码中的3行替换为this):

div

但是,我想了解wrapul方法的用途。为什么;WITH Q AS ( SELECT 'A' AS tablename, Column1, Column2 FROM TableFoo UNION SELECT 'B' AS tablename, Column1, Column2 FROM TableBar ) SELECT DISTINCT TableName = replace(STUFF((SELECT ','+TableName AS [data()] FROM Q T2 WHERE T2.Column1 = T1.Column1 AND T2.Column2 = T1.Column2 FOR XML PATH('')),1,1,''),',','') , Column1, Column2 FROM Q T1 在第一个例子中消失了?

1 个答案:

答案 0 :(得分:0)

wrap命令创建给定元素的副本,因此创建的“div”与存储在变量中的“div”不同。 来自文档:

  

此结构的副本将围绕匹配元素集中的每个元素。此方法返回用于链接目的的原始元素集。

更多信息:http://api.jquery.com/wrap/

如果你想看到你的div,请将代码$('body').append($div);放在代码之后,你会看到你的'ul'没有消失。你把'ul'元素放在'div'元素中,但你没有在任何地方使用'div'。