Javascript 插入后,然后删除上一个元素

Javascript 插入后,然后删除上一个元素,javascript,jquery,dom,Javascript,Jquery,Dom,通过一段应该执行简单DOM操作的代码获得一些奇怪的行为: b.detach(); b.insertAfter(a); a.remove(); 最初,HTML看起来像 <a> <b> </b> </a> 然后移除a: <a></a> <b></b> <b></b> 但事实并非如此。相反,a保留在那里,而b只是消失了。对可能出现的问题有什么看法吗 我尝试使用afte

通过一段应该执行简单DOM操作的代码获得一些奇怪的行为:

b.detach();
b.insertAfter(a);
a.remove();
最初,HTML看起来像

<a>
  <b> </b>
</a>
然后移除
a

<a></a>
<b></b>
<b></b>

但事实并非如此。相反,
a
保留在那里,而
b
只是消失了。对可能出现的问题有什么看法吗

我尝试使用
after()
来代替,反转参数,但得到了相同的结果。

删除b.detach() b、 插入者(a);将移动它

移除b.分离() b、 插入者(a);将移动它

移除b.分离() b、 插入者(a);将移动它

移除b.分离()
b、 插入者(a);将移动它

我不确定你的意思,如果我尝试,它会按照你想要的方式工作:

HTML:

更新:

这就是如何在本手册中描述的场景中完成的:


我不确定你的意思,如果我尝试一下,它会按照你想要的方式工作:

HTML:

更新:

这就是如何在本手册中描述的场景中完成的:


我不确定你的意思,如果我尝试一下,它会按照你想要的方式工作:

HTML:

更新:

这就是如何在本手册中描述的场景中完成的:


我不确定你的意思,如果我尝试一下,它会按照你想要的方式工作:

HTML:

更新:

这就是如何在本手册中描述的场景中完成的:


原因是
wrap
确实克隆了元素,因此
a
引用的内容实际上从未包含
b
。顺便说一句,
detach
是多余的,因为在DOM的其他地方插入元素时,元素会自动删除


因此,要获得插入后的
a
,您需要重新选择它(例如通过
b.parent()
)。

原因是
wrap
确实克隆了元素,因此
a
引用的内容实际上从未包含
b
。顺便说一句,
detach
是多余的,因为在DOM的其他地方插入元素时,元素会自动删除


因此,要获得插入后的
a
,您需要重新选择它(例如通过
b.parent()
)。

原因是
wrap
确实克隆了元素,因此
a
引用的内容实际上从未包含
b
。顺便说一句,
detach
是多余的,因为在DOM的其他地方插入元素时,元素会自动删除


因此,要获得插入后的
a
,您需要重新选择它(例如通过
b.parent()
)。

原因是
wrap
确实克隆了元素,因此
a
引用的内容实际上从未包含
b
。顺便说一句,
detach
是多余的,因为在DOM的其他地方插入元素时,元素会自动删除


因此,要获得插入后的
a
,您需要重新选择它(例如,通过
b.parent()
)。

嗨,这很奇怪:)我已经更新了您的小提琴以反映我的实际代码-它也有同样的问题,这确实很奇怪。似乎只要调用“wrap”,变量
a
就不再包含
ul
li
元素。我将更新我的答案,告诉你如何解决它,但我不知道为什么它不起作用。好的,那么wrap()就是问题所在:/谢谢!我将wrap()替换为insertAfter和append的组合,这很奇怪:)我已经更新了你的fiddle以反映我的实际代码,它也有同样的问题,这确实很奇怪。似乎只要调用“wrap”,变量
a
就不再包含
ul
li
元素。我将更新我的答案,告诉你如何解决它,但我不知道为什么它不起作用。好的,那么wrap()就是问题所在:/谢谢!我将wrap()替换为insertAfter和append的组合,这很奇怪:)我已经更新了你的fiddle以反映我的实际代码,它也有同样的问题,这确实很奇怪。似乎只要调用“wrap”,变量
a
就不再包含
ul
li
元素。我将更新我的答案,告诉你如何解决它,但我不知道为什么它不起作用。好的,那么wrap()就是问题所在:/谢谢!我将wrap()替换为insertAfter和append的组合,这很奇怪:)我已经更新了你的fiddle以反映我的实际代码,它也有同样的问题,这确实很奇怪。似乎只要调用“wrap”,变量
a
就不再包含
ul
li
元素。我将更新我的答案,告诉你如何解决它,但我不知道为什么它不起作用。好的,那么wrap()就是问题所在:/谢谢!我将wrap()替换为insertAfter和append的组合,这很好地解决了toothanks问题。我认为wrap()是
a.insertAfter(b)的快捷方式;a、 查找('li')。附加(b):)谢谢,很高兴知道。我认为wrap()是
a.insertAfter(b)的快捷方式;a、 查找('li')。附加(b):)谢谢,很高兴知道。我认为wrap()是
a.insertAfter(b)的快捷方式;a、 查找('li')。附加(b):)谢谢,很高兴知道。我认为wrap()是
a.insertAfter(b)的快捷方式;a、 查找('li')。附加(b):)
<div id="test">
    <a>
        Test <b>Test</b>
    </a>
</div>

<button id="change_dom">manipulate</button>
<br />
<textarea id="result"></textarea>
$(document).ready(function(){
    $('#change_dom').click(function(){
        var a = $('a'),
            b = $('b');

        b.detach();
        b.insertAfter(a);
        a.remove();

        $('#result').val($('#test').html());
    });
});
var list = b.parents('ul')
b.insertAfter(list);
list.remove();