如何在ul容器中包装这些li元素组?

时间:2016-05-27 11:17:07

标签: javascript jquery

目标:

首先将元素包装在一组ul容器中的第一个空div之前,然后对空li s之间的元素执行相同操作。

空元素可以包含在容器中或删除。

问题:

如果我无法定位该类,如何将这些元素集包装在一组ul容器中?

问题:

1)我可以使用的唯一变量是空li,因为每个容器中都有不同数量的元素。

2)html不以空li结尾。

HTML:

<div class="body">
<fieldset>
<ol>

<li>
    <h6>Customer Details</h6>
</li>
<li>
    <h6>Customer Details</h6>
</li>

包装上面的元素

<li>&nbsp;</li>

将下面的元素换行,直到下一个空li

<li>
    <h6>Customer Details</h6>
</li>
<li>
    <h6>Customer Details</h6>
</li>
<li>
    <h6>Customer Details</h6>
</li>
<li>&nbsp;</li> 

将下面的元素换行,直到下一个空li

<li>
    <h6>Customer Details</h6>
</li>
<li>
    <h6>Customer Details</h6>
</li>
<li>
    <h6>Customer Details</h6>
</li>
<li>
    <h6>Customer Details</h6>
</li>

</ol>
</fieldset>
</div>

1 个答案:

答案 0 :(得分:3)

这完全未经测试,因为我在手机上,但如果有语法错误,我很乐意更新。它依赖于您能够选择/识别您提供的HTML的父级(假设您未能添加上面评论中引用的最终空分隔符)。

// Get the known parent to this mess of li elements
var knownParent = $(...);
// Give the empty li elements an identifying class
knownParent.find("li").filter(function(){ return $(this).html().match(/&nbsp;/) !== null; }).addClass("_liDivider");
// Wrap everything between the dividers with a ul element
$.each(
  $("._liDivider:not(:last-child)"), function() {
      $(this)
        .nextUntil("._liDivider")
        .wrap("<ul></ul>");
    }
);
// Now deal with the orphaned li elements before the first divider
knownParent.find("li:first-of-type").nextUntil("._liDivider").wrap("<ul></ul>");