雖然這已經是很久以前問,它仍然是一個問題(如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