【问题标题】:How do I move children elements to a new parent element in jQuery?如何在 jQuery 中将子元素移动到新的父元素?
【发布时间】:2019-09-18 02:49:36
【问题描述】:

我有一个子菜单列表,我想将每个 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"));
});

您知道如何实现最终输出吗?

【问题讨论】:

标签: javascript jquery css-selectors


【解决方案1】:

我认为这就是你正在尝试做的事情。

$('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>

【讨论】:

    【解决方案2】:

    你可以为 div 设置 id 并像这样使用每个方法

    $(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/

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-02-05
        • 2014-12-17
        • 1970-01-01
        • 2017-12-17
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多