将嵌套列表拆分为单独的列表

时间:2014-04-28 13:47:30

标签: javascript jquery

我在导航中使用了嵌套列表。如何使用Jquery将嵌套列表拆分为单独的列表,每个嵌套列表分开但保持分隔列表与原始标题一起?

html:

<ul id="bigList">
  <li><a href="#">Diary products</a>
    <ul>
      <li><a href="#">Milk</a>
        <ul>
          <li><a href="#">Goat</a></li>
          <li><a href="#">Cow</a>
            <ul>
              <li><a href="#">Smelly</a></li>
              <li><a href="#">Extra smelly</a></li>
            </ul>
            <li><a href="#">Soya</a></li>
          </li>
        </ul>
      </li>
      <li><a href="#">Eggs</a></li>
      <li><a href="#">Cheese</a></li>
      <li><a href="#">Pasta</a></li>
    </ul>
  </li>
</ul>

期望的输出:

  <ul>
   <li><a href="#">Diary Products</a>
    <ul>
      <li><a href="#">Milk</a></li>
      <li><a href="#">Eggs</a></li>
      <li><a href="#">Cheese</a></li>
      <li><a href="#">Pasta</a></li>
     </ul>
   </li>
  </ul>

  <ul>
    <li><a href="#">Milk</a>
      <ul>
        <li><a href="#">Goat</a></li>
        <li><a href="#">Cow</a></li>
        <li><a href="#">Soya</a></li>     
      </ul>
    </li>
   </ul>

    <ul>
      <li><a href="#">Cow</a>
        <ul>
          <li><a href="#">Smelly</a></li>
          <li><a href="#">Extra smelly</a></li>
        </ul>
      </li>
    </ul>

到目前为止的Javascript:

$(function () {
    var $bigList = $('#bigList'),
        group;
    while ((group = $bigList.find('li:lt(20)').remove()).length) {
        $('<ul/>').append(group).appendTo('body');
    }
});

这是一个小提琴

http://jsfiddle.net/zEA5t/3/

2 个答案:

答案 0 :(得分:6)

这个简单的小代码可以做到:

var myList = $('<ul>');

var $originalList = $('#bigList');

$originalList.find('li:has(li)').each(function(){
    var $this = $(this);

    $this.clone().appendTo(myList).find('>ul >li >ul').remove();
})

$('body').append(myList);

小提琴:http://jsfiddle.net/zEA5t/6/

答案 1 :(得分:0)

我正在使用选择器ul&gt; li> ul,输出结果

$(function(){
    $('ul > li > ul').each(function(i){
        var clone = $(this).clone();
        clone.find('ul').remove();

        var clone2 = $(this).parent().clone();
        clone2.children('ul, li').remove();
        clone2.append(clone);

        var clone3 = $(this).parent().parent().clone();
        clone3.children('ul, li').remove();
        clone3.append(clone2);

        clone3.appendTo('#output');
    });
})