如何在ul中包装一组li标签
How to wrap groups of li tags inside ul
我有一个导航菜单它包含了一堆li标签其中一些有"sub-item"类我想把这些li标签分组到一个ul中所以我的导航是这样的
<ul class='main-menu'>
<li><a href="#">Home</a></li>
<li><a href="#">Pages</a></li>
<li class='sub-item'><a href="#">_Contact Us</a></li>
<li class='sub-item'><a href="#">_Community</a></li>
<li class='sub-item'><a href="#">_About Me</a></li>
<li class='sub-item'><a href="#">_Blog</a></li>
<li><a href="#">DropDown </a></li>
<li class='sub-item'><a href="#">_Sub Menu 1</a></li>
<li class='sub-item'><a href="#">_Sub Menu 2</a></li>
<li class='sub-item'><a href="#">_Sub Menu 3</a></li>
<li class='sub-item'><a href="#">_Sub Menu 4</a></li>
<li><a href="#">Sign Out</a></li>
</ul>
将变成这样:
<ul id='main-menu'>
<li><a href="#">Home</a></li>
<li><a href="#">Pages</a></li>
<ul class="sub-menu">
<li class='sub-item'><a href="#">_Contact Us</a></li>
<li class='sub-item'><a href="#">_Community</a></li>
<li class='sub-item'><a href="#">_About Me</a></li>
<li class='sub-item'><a href="#">_Blog</a></li>
</ul>
<li><a href="#">DropDown </a></li>
<ul class="sub-menu">
<li class='sub-item'><a href="#">_Sub Menu 1</a></li>
<li class='sub-item'><a href="#">_Sub Menu 2</a></li>
<li class='sub-item'><a href="#">_Sub Menu 3</a></li>
<li class='sub-item'><a href="#">_Sub Menu 4</a></li>
</ul>
<li><a href="#">Sign Out</a></li>
</ul>
这是我的尝试,但不幸的是它没有工作:
$('.main-menu li a').each(function() {
var $this = $(this),
content = $this.text();
if (content.indexOf('_') != -1) {
$this.parent('li').addClass('sub-item');
}
});
$('.sub-item').wrapAll('<ul class="sub-menu"></ul>');
下面是一个JsFiddle演示:http://jsfiddle.net/hc05fhxr/1/
您的问题中给出的期望输出无效,因为li不能将ul
作为其内容。
我可能的替代方法是添加新的ul
作为先前锚的后代
$('li:not(.sub-item)').each(function() {
var $li = $(this),
$subs = $li.nextUntil(':not(.sub-item)');
if ($subs.length) {
$('<ul />', {
'class': 'sub-menu'
}).html($subs).appendTo($li);
}
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<ul class='main-menu'>
<li><a href="#">Home</a></li>
<li><a href="#">Pages</a></li>
<li class='sub-item'><a href="#">Contact Us</a></li>
<li class='sub-item'><a href="#">Community</a></li>
<li class='sub-item'><a href="#">About Me</a></li>
<li class='sub-item'><a href="#">Blog</a></li>
<li><a href="#">DropDown </a></li>
<li class='sub-item'><a href="#">Sub Menu 1</a></li>
<li class='sub-item'><a href="#">Sub Menu 2</a></li>
<li class='sub-item'><a href="#">Sub Menu 3</a></li>
<li class='sub-item'><a href="#">Sub Menu 4</a></li>
<li><a href="#">Sign Out</a></li>
</ul>
应该使用prev()和after()的组合
$('.main-menu li').each(function(index, el) {
var el = $(el);
if (!el.hasClass("sub-item")) {
el.after($("<ul></ul>"));
} else {
el.prev("ul").append(el);
}
});
$('.main-menu ul:empty').remove()
这是你的小提琴更新:http://jsfiddle.net/hc05fhxr/3/
相关文章:
- fluxxor向一个flux实例添加一组以上的操作
- 我们怎样才能将内含子J用于一组特定的元素
- 使用linq.js按当前日期订购一组momentjs日期
- 正则表达式,从一组关键字中获取奇数
- 创建一组元素JointJS
- 如何在javascript中获取一组复选框值
- 一组(共组..)
- 使用JS将页面中的每个字母设置为随机颜色.为什么在页面的每个打开标记之前总是有一组额外的span标记
- 在一组复选框中,一次只允许选择一个
- 为什么在fabricjs中可选择的不适用于一组圆
- 如何在不刷新页面的情况下每次单击一组选项卡时刷新视图内容窗格
- 从一组具有相同起始和结束的所有段落的段落中提取包含特定字符串的段落
- 简单的Javascript文本编辑器或一组函数
- 基于日期范围的一组日期范围内的天数
- 处理对象数组并将它们以 4 个为一组进行分配
- 如何在 Javascript 中用一组字符拆分子字符串上的字符串
- 使一组对象与 jQuery 一起拖动
- 使用第 n 个类型设置一组八个元素的样式
- 是否有一种方法可以使用javascript/jquery来搜索一组li标签并缩小搜索范围
- 如何在ul中包装一组li标签