[英]insertAfter, then remove previous element
通过一段应该进行简单的DOM操作的代码来获得一些奇怪的行为:
b.detach();
b.insertAfter(a);
a.remove();
最初,HTML看起来像
<a>
<b> </b>
</a>
(如果重要,我正在使用b.wrap('<a></a>')
来构建它)
代码运行后它应该移动b
后a
:
<a></a>
<b></b>
然后取出a
:
<b></b>
但事实并非如此。 相反, a
保留在那里, b
消失了。 有什么想法可能有问题吗?
我尝试使用after()
代替,反转参数,但得到相同的结果。
删除b.detach()b.insertAfter(a); 将移动它
我不确定您的意思,如果尝试的话,它会以您想要的方式工作:
HTML:
<div id="test">
<a>
Test <b>Test</b>
</a>
</div>
<button id="change_dom">manipulate</button>
<br />
<textarea id="result"></textarea>
JS:
$(document).ready(function(){
$('#change_dom').click(function(){
var a = $('a'),
b = $('b');
b.detach();
b.insertAfter(a);
a.remove();
$('#result').val($('#test').html());
});
});
更新:
这是在此提琴中描述的场景中可以做到的方式: http : //jsfiddle.net/8wy7v/1/
var list = b.parents('ul')
b.insertAfter(list);
list.remove();
原因是wrap
确实会克隆元素-因此a
所引用的a
实际上不会包含b
。 顺便说一句, detach
是多余的,因为将元素插入DOM中的其他位置时,元素将被自动删除。
因此,要获取要插入的a
,您将需要重新选择它(例如,通过b.parent()
)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.