虽然这已经是很久以前问,它仍然是一个问题(如2015年6月)的jQuery中(v1.11.1)。这里是我的解决办法,这感觉有点..嗯,应该说“特殊”,但工作仍然:
var $orig = $('p'); // some existing element
var $wrap = $('<div>').css({border:'1px solid red'});
$wrap = $orig.wrap($wrap).parent(); //the object that is being wrapped is returned, so selecting its parent will get the wrapper. Re-setting that in the $wrap variable will retain the wrapper for reference
$wrap.append('<p>SMOKE YOU</p>'); // this will now work
注:需要注意的是,$wrap
元素不再是可重复使用的包装,因为它现在包含$orig
元素。解决方法是通过使用另一个“特殊”的方式add()
:
var $orig = $('p'); // some existing element
var $wrap = $('<div id="wrapper">').css({border:'1px solid red'});
$wrap = $wrap.add($orig.wrap($wrap.clone().empty()).parent()); //the object that is being wrapped is returned, so calling for its parent will return the wrapper.
$wrap.append('<p>SMOKE YOU</p>'); // this will now work
$wrap = $wrap.add($('div.otherdiv').wrap($wrap.clone().empty()).parent())
console.log($wrap); //as you can see the $wrap variable now contains two divs
$wrap.css({'border' : '1px solid blue'}); //this will now work on all wraps
这不是很清楚的代码,但它的工程!查看this Fiddle作为一个工作示例。
此相关的问题没有解答,需要保留提及包装:http://stackoverflow.com/questions/4190946/jquery-how-to-create-元素然后包裹这个另外存在的元素 – Phrogz 2011-04-18 18:40:23