0

CMSは、いくつかのリストアイテムを次の形式で出力します。

<ul class="tocList">
  <li><a href="#s6855">a list item</a></li>

  <li class="indent"><a href="#s4671">a list item</a></li>

  <li class="indent"><a href="#s6824">a list item</a></li>

  <li><a href="#s6856">a list item</a></li>

  <li class="indent"><a href="#s4672">a list item</a></li>

  <li class="indent"><a href="#s4673">a list item</a></li>

  <li class="indent"><a href="#s4674">a list item</a></li>
</ul>

正しく構造化されたネストされたリストを含めるように構造を変更する必要があります。

<ul class="tocList">
  <li><a href="#s6855">a list item</a>
    <ul>
      <li class="indent"><a href="#s4671">a list item</a></li>

      <li class="indent"><a href="#s6824">a list item</a></li>
    </ul>
  </li>
  <li><a href="#s6856">a list item</a>
    <ul>
      <li class="indent"><a href="#s4672">a list item</a></li>

      <li class="indent"><a href="#s4673">a list item</a></li>

      <li class="indent"><a href="#s4674">a list item</a></li>
    </ul>
  </li>
</ul>

CMSロジックを変更するのは面倒で、編集者の作業が多すぎます。これをJQueryで実現したいと思います。.wrap()私はさまざまなJQuery 、.each()関数を喜んで試してきました。

4

2 に答える 2

1
$(".tocList li:not(.indent)").each(function() {
    $(this).nextUntil("li:not(.indent)").wrapAll("<ul/>");
    $(this).next("ul").detach().appendTo($(this));
});

フィドル

于 2013-01-21T17:17:10.187 に答える
0
$('ul.tocList > li > a').each(function(i,v){
    var li = $(v).parent();
    li.nextUntil('li:not(.indent)').wrapAll('<ul></ul>');
    li.next('ul').detach().appendTo(li)
});

それをする必要があります。

作業デモ

于 2013-01-21T17:20:52.240 に答える