使用jQuery将连续列表项包装在不同的组中
我有一个由CMS导出的无序列表,需要识别具有类.sub的
。
我尝试了wrapAll()
方法但找到了所有
。 我需要它来维持单独的分组。
导出的代码如下:
我需要它:
任何帮助将不胜感激。
- 使用
.each
遍历所有.sub
元素。 - 使用
hasClass()
忽略其父类已wrapped
类的元素 - 使用
nextUntil(:not(.sub))
来选择所有连续的子元素(使用.andSelf()
包含自身)。
给定的第一个参数表示:当元素不匹配时停止向前看.sub
。 -
wrapAll
演示: http : //jsfiddle.net/8MVKu/
为了完整起见,我在
- ...
包含了一组
元素,而不是普通的
。
码:
$('.sub').each(function() { if ($(this.parentNode).hasClass('wrapped')) return; $(this).nextUntil(':not(.sub)').andSelf().wrapAll(''); }); $('ul.wrapped').removeClass('wrapped'); // Remove temporary dummy
我想扩展Rob W已经很棒的解决方案,提供一种消除临时包装类的方法:
$(document).ready(function() { $('li.sub').filter(':not(li.sub + li.sub)').each(function() { $(this).nextUntil(':not(li.sub)').andSelf().wrapAll(''); }); });
编辑:甚至不需要filter:
$('li.sub:not(li.sub + li.sub)').each(function() { $(this).nextUntil(':not(li.sub)').andSelf().wrapAll(''); });
我相信你应该拥有的是这个jQuery:
$('li.sub').wrap('
- ');
这将正确地将
元素包装在新的
标记中,同时将它们包装在
标记内。 您的示例的输出将是: