删除父元素并重新追加子元素

Removing parent elements and re-appending children

本文关键字:元素 追加 新追加 删除      更新时间:2023-09-26

我有一个无序列表的导航,这是我遵循/必须遵循的简单结构才能使我的jQuery插件正常工作,因此使此代码结构成为必需品:

<nav id="mp-menu" class="mp-menu">
<div class="mp-level">
    <ul id="demo1" class="nav">
        <li>
            <a href="#">Devices</a>
            <div class="mp-level">
            <h2>Devices</h2>
            <a class="mp-back" href="#">back</a>
            <ul>
                <li><a href="#">Mobile Phones</a></li>
                <li><a href="#">Televisions</a></li>
                <li><a href="#">Cameras</a></li>
            </ul>
            </div>
        </li>
        <li>
            <a href="#">Magazines</a>
            <div class="mp-level">
                <h2>Magazines</h2>
                <a class="mp-back" href="#">back</a>
                <ul>
                    <li><a href="#">National Geographic</a></li>
                    <li><a href="#">Scientific American</a></li>
                </ul>
            </div>
        </li>
        ...
   </ul>
</div>
</nav>

我需要提供一个回退,我选择了另一个需要使用与上述结构不同的 jQuery 插件。我需要删除类名为 .mp-level 的 DIV,但仍保留所有无序列表,包括.mp-level子列表。

结果将只是没有标题和 DIV 的无序列表。我下面的代码删除了正确的元素,但我的问题是重新插入子无序列表(特别是级别 2):

$( "#demo1 h2, .mp-back" ).remove();
$( ".mp-level ul li .mp-level" ).detach();
$( ".mp-level ul li" ).append('.mp-level ul li .mp-level ul');

有人有任何建议,如何在我移除他们的父母后重新插入孩子 UL

你可以这样做

$("#mp-menu").find(".mp-level").each(function(i,n){//each ".mp-level"
    $(n).parent().append($(n).children());//append children to parent
    $(n).remove();//remove actual div
});        

http://jsfiddle.net/WBWwG/

您可以通过将分离的节点(包装在 jQuery 对象中)分配给变量,然后在.append()调用中使用该变量来保存这些节点。

像这样:

// this selector doesn't select anything from the example html, btw
var $mp_level = $( ".mp-level ul li .mp-level" ).detach(); 
$(".mp-level ul li").append($mp_level);