简体   繁体   English

使用Jquery将第一级“ li”标签包装到一个div中

[英]Wrap first level of “li” tags into one div using Jquery

Consider we have a multi-level html list that looks like this: 考虑一下,我们有一个如下所示的多级html列表:

 <ul class="catalog"> <li> <ul> <li> <ul> <li>subcat subcat 1</li> <li>subcat subcat 2</li> <li>subcat subcat 3</li> </ul> </li> <li>subcat 2</li> <li>subcat 3</li> </ul> </li> <li> <ul> <li>subcat 4</li> <li>subcat 5</li> <li>subcat 6</li> </ul> </li> </ul> 

I need to wrap into one div only <li> tags (hamed "header 1", "header 2"... and all its children) which belong to first level of the list. 我只需要将属于列表第一级的<li>标记(包含“ header 1”,“ header 2” ...及其所有子项)包装到一个div中。

The result should be: 结果应为:

 <ul class="catalog"> <div class="myWrapper"> <!-- Added by JQuery --> <li> <ul> <li> <ul> <li>subcat subcat 1</li> <li>subcat subcat 2</li> <li>subcat subcat 3</li> </ul> </li> <li>subcat 2</li> <li>subcat 3</li> </ul> </li> <li> <ul> <li>subcat 4</li> <li>subcat 5</li> <li>subcat 6</li> </ul> </li> </div> <!-- Added by JQuery --> </ul> 

I tried wrap() function but it did not work as expected 我尝试了wrap()函数,但是没有按预期工作

Any ideas how to do this job? 任何想法如何完成这项工作?

$('.catalog > li').wrapAll('<div class="wrapper"></div>');

但是,您都使用严重无效的HTML开头和结尾,因此您可能应该解决该问题,然后再问这个问题。

First, let's start with valid HTML, like this: 首先,让我们从有效的HTML开始,如下所示:

<ul class="catalog">
   <li>header 1
      <ul>
        <li>subcat 1
            <ul>
               <li>subcat subcat 1</li>
               <li>subcat subcat 2</li>
               <li>subcat subcat 3</li>
            </ul>
        </li>
        <li>subcat 2</li>
        <li>subcat 3</li>
      </ul>
   </li>
   <li>header 2
      <ul>
        <li>subcat 4</li>
        <li>subcat 5</li>
        <li>subcat 6</li>
      </ul>
    </li>
</ul>​

Then you cap wrap them using .wrapAll() , like this: 然后使用.wrapAll()将它们.wrapAll()帽,如下所示:

$(".catalog > li").wrapAll("<li><div class='something'><ul></ul></div></li>");​

This results in valid HTML, like this: 这样会生成有效的HTML,如下所示:

<ul class="catalog">
  <li>
    <div class="something">
      <ul>
        <li>header 1
          <ul>
            <li>subcat 1
                <ul>
                   <li>subcat subcat 1</li>
                   <li>subcat subcat 2</li>
                   <li>subcat subcat 3</li>
                </ul>
            </li>
            <li>subcat 2</li>
            <li>subcat 3</li>
          </ul>
        </li><li>header 2
          <ul>
            <li>subcat 4</li>
            <li>subcat 5</li>
            <li>subcat 6</li>
          </ul>
        </li>
      </ul>
    </div>
  </li>  
</ul>

You can test it out here , though you can probably get the effect you want with styling on the original <ul> , display: block for example. 您可以在此处进行测试 ,尽管您可以通过在原始的<ul> display: block样式来获得所需的效果 ,例如display: block

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM