如何在jQuery中将子元素移动到新的父元素?

4
我有一个子菜单列表,我想将每4个子项 <li></li> 分别移动到新的父级 <ul></ul>
<ul class="sub_menu">
    <li>Menu 1</li>
    <li>Menu 2</li>
    <li>Menu 3</li>
    <li>Menu 4</li>
    <li>Menu 5</li>
    <li>Menu 6</li>
    <li>Menu 7</li>
    <li>Menu 8</li>
</ul>

<div class="container_row">
    <div class="row">

        <div class="col1 col_3">
            <div class="wrap">
                <ul>

                </ul>
            </div>
        </div>

        <div class="col1 col_3">
            <div class="wrap">
                <ul>

                </ul>
            </div>
        </div>

    </div>
</div>

我需要的最终输出结果如下所示:
<div class="container_row">
    <div class="row">

        <div class="col1 col_3">
            <div class="wrap">
                <ul>
                    <li>Menu 1</li>
                    <li>Menu 2</li>
                    <li>Menu 3</li>
                    <li>Menu 4</li>
                </ul>
            </div>
        </div>

        <div class="col1 col_3">
            <div class="wrap">
                <ul>
                    <li>Menu 5</li>
                    <li>Menu 6</li>
                    <li>Menu 7</li>
                    <li>Menu 8</li>
                </ul>
            </div>
        </div>

    </div>
</div>

我尝试过的代码是:
$(document).ready(function() {
    $(".container_row .wrap ul").append($(".sub_menu li"));
});

你有没有任何想法如何实现最终输出?

可能是 https://dev59.com/PJ_ha4cB1Zd3GeqP5diQ?rq=1 的重复问题。 - 04FS
3个回答

5
这大概是你正在尝试做的事情吧。

$('ul.sub_menu li').each(function (i) {
  const index = Math.trunc(i / 4);
  $(this).detach().appendTo($('div.wrap ul').get(index));
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<ul class="sub_menu">
    <li>Menu 1</li>
    <li>Menu 2</li>
    <li>Menu 3</li>
    <li>Menu 4</li>
    <li>Menu 5</li>
    <li>Menu 6</li>
    <li>Menu 7</li>
    <li>Menu 8</li>
</ul>

<div class="container_row">
    <div class="row">
        <div class="col1 col_3">
            <div class="wrap">
                <ul></ul>
            </div>
        </div>
        <div class="col1 col_3">
            <div class="wrap">
                <ul></ul>
            </div>
        </div>
    </div>
</div>


4
您可以为 div 设置 ID,然后像这样使用 each 方法。

$(document).ready(function() {
    var length = $(".sub_menu li").length;
    //console.log(length)
    $(".sub_menu li").each(function(index, item){
    if(index < length/2){
        $("#first ul").append(item);
        //console.log($(".container_row .wrap ul:nth-child(0)").length)
    }else{
       $("#second ul").append(item);
       //console.log(index)
    }
    })
    
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<ul class="sub_menu">
    <li>Menu 1</li>
    <li>Menu 2</li>
    <li>Menu 3</li>
    <li>Menu 4</li>
    <li>Menu 5</li>
    <li>Menu 6</li>
    <li>Menu 7</li>
    <li>Menu 8</li>
</ul>

<div class="container_row">
    <div class="row">

        <div class="col1 col_3">
            <div class="wrap" id="first">
                <ul>

                </ul>
            </div>
        </div>

        <div class="col1 col_3">
            <div class="wrap" id="second">
                <ul>

                </ul>
            </div>
        </div>

    </div>
</div>


3
你可以像这样做:
HTML
<ul id="set-1">
    <li>item 1</li>
    <li>item 2</li>
    <li>item 3</li>
    <li>item 4</li>
    <li>item 5</li>
    <li>item 6</li>
    <li>item 7</li>
    <li>item 8</li>
</ul>

<ul id="set-2"></ul>

JS

jQuery(document).ready(function($)
{
    let list = $('#set-1').find('li'),
        midRange = Math.ceil(list.length / 2),
        first = list.slice(0, midRange),
        last = list.slice(midRange);

    $('#set-1').html('');

    first.each(function() {$('#set-1').append('<li>'+ $(this).html() +'</li>')});
    last.each(function() {$('#set-2').append ('<li>'+ $(this).html() +'</li>')});
});

本质上,我们获取li元素,将计数拆分为两个,并创建两个数组。然后循环遍历每个数组并添加HTML。

jsfiddle: https://jsfiddle.net/rquo7nk9/


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接