我有一些语法理解问题。
我正在尝试使用div,克隆它,将克隆包装在两个新生成的div中,然后在关闭BODY标记之前将其全部粘贴到DOM中。这就是我所拥有的:
$('.myDiv').click(function(){
var $myDiv = $(this).clone();
var $myWrapper1 = $('div').css('border','10px solid blue');
var $myWrapper2 = $('div').css('border','10px solid green');
$myDiv.wrap($myWrapper1).wrap($myWrapper2).appendTo('body');
});
jsbin live example:http://jsbin.com/upedox/4/
这不是我期待它做的事情,所以显然我并没有完全理解wrap
。我想要发生的是最终得到我的div(红色边框)的副本,其中包含两个div(一个带有绿色和蓝色边框),然后插入现有div之后。
反而发生的事情是div被克隆了,但是没有用其他div包裹但是,它的内容只是插入到我用它包装的最后一个div中(所以我最终得到了一个克隆的绿色边框div)它坚持在现有的div之上。
我对包装误解了什么?
答案 0 :(得分:3)
正如我解释的那样,请注意以下内容:
<div class="foo">Bar</div>
如果你想把foo包装在一个bar div中,你可以称之为:
var $r = $('.foo').wrap($('<div>',{class:'bar'}));
而不是$ r导致<div class="bar"><div class="foo">Bar</div></div>
(正如您所期望的那样)您实际获得的内容是原始<div class="foo">Bar</div>
(并且在DOM中,它已被<div class="bar"></div>
包裹)。
所以,相反(考虑到你正在克隆它而不是直接在DOM中工作)而是使用append
代替:
var $orig = $('.foo').clone();
var $firstWrap = $('<div>',{class:'bar'});
var $secondWrap = $('<div>',{class:'baz'});
var $r = $secondWrap.append($firstWrap.append($orig));
现在,上面有<div class="baz"><div class="bar"><div class="foo">Bar</div></div></div>
里面(就像你想要的那样)然后appendTo('body')
答案 1 :(得分:1)
$($myDiv).wrap($myWrapper1)
返回$myDiv
,其中不包含已包装的元素。
代码应如下所示。
$('document').ready(function(){
$('.myDiv').click(function(){
var $myDiv = $(this).clone();
var $myWrapper1 = $('<div>').css('border','10px solid blue');
var $myWrapper2 = $('<div>').css('border','10px solid green');
$myDiv.wrap($myWrapper1).parent()
.wrap($myWrapper2).parent()
.appendTo('body');
});
});