我没有得到.wrap
没有的.append
。
如果 wrap 的主要目的是在元素周围添加内容,我可以轻松停止使用.wrap
并使用.append
代替,对吧?
所以,我正在使用这个测试代码追加:
<script type="text/javascript">
$(document).ready(function(){
var $theWrapper = $('<div class="im-the-wrapper" />');
var $theContent = $('<p>Me</p>');
console.log($theWrapper.get(0));
console.log($theContent.get(0));
$('body').append($theContent);
$theWrapper.append($theContent);
});
</script>
结果:
这个测试代码 wrap 东西:
<script type="text/javascript">
$(document).ready(function(){
var $theWrapper = $('<div class="im-the-wrapper" />');
var $theContent = $('<p>Me</p>');
console.log($theWrapper.get(0));
console.log($theContent.get(0));
$('body').append($theContent);
$theContent.wrap($theWrapper);
});
</script>
结果:
我认为他们都会返回完全相同的对象,但他们不会。背景中真的发生了什么?
答案 0 :(得分:1)
element.wrap(wrapper)
基本上是这样做的:
element.before(wrapper);
wrapper.append(element);
这就是为什么当你使用wrap
时元素没有丢失,但是当你手动完成而没有先在元素之前附加包装器时,你最终只是从DOM中删除元素。
答案 1 :(得分:1)
答案 2 :(得分:0)
使用您的第一个代码,您就是......
有了第二个,你就是......
考虑到你的例子,比其中任何一个更好的解决方案是......
$theWrapper.append($theContent).appendTo("body");
这种方式发生的操作较少。
.wrap()
方法实际上仅在已经存在需要包装在新元素中的某些内容时使用。