【发布时间】:2016-06-26 20:39:25
【问题描述】:
我的问题是如何通过从列表项文本中添加类查找来包装/中断列表项,例如下面的示例?
我的相关问题在这里:Wrap List elements by class name
<div class="widget-content">
<ul>
<li><span class="label"> demo-text1 </span> Test Content</li>
<li><span class="label"> demo-text2 </span> Test Content</li>
<li><span class="label"> demo-text1 </span> Test Content</li>
<li><span class="label"> demo-text2 </span> Test Content</li>
<li><span class="label"> demo-text1 </span> Test Content</li>
<li><span class="label"> demo-text2 </span> Test Content</li>
</ul>
</div>
我想打破这样的列表项:
<div class="widget-content">
<ul class="demo-text1">
<li><span class="label"> demo-text1 </span> Test Content</li>
<li><span class="label"> demo-text1 </span> Test Content</li>
<li><span class="label"> demo-text1 </span> Test Content</li>
</ul> <!-- Break part 1 -->
<ul class="demo-text2">
<!-- Break part 2 -->
<li><span class="label"> demo-text2 </span> Test Content</li>
<li><span class="label"> demo-text2 </span> Test Content</li>
<li><span class="label"> demo-text2 </span> Test Content</li>
</ul>
</div>
我的意思是像第二个 HTML 示例那样将列表项分为两部分。通过替换上面给出的class="label"example(第二个HTML)中的文本,将类添加到父ul。
我怎样才能简单地通过 jQuery/JS 做到这一点?这是我尝试过的:
$(".widget-content").each(function() {
var $li = $(this).find("li").unwrap(); // unwrap removes the old UL wrapper
var uniq = [];
// Create a collection of unique "label*" classes:
$li.find("[class^=label]").attr("class", function(i, v) {
if (!~$.inArray(v, uniq)) uniq.push(v);
});
// Group LI by A class, and wrap into a new UL with the same class
$.each(uniq, function(i, klas) {
$("a." + klas).closest("li").wrapAll($("<ul/>", {
class: klas
}));
});
});
提前致谢。
【问题讨论】:
-
无论
li有多少,您总是希望将列表分成两个,还是要将其分成多个组,每组 3 个?另外,请添加您自己编写的JS代码来解决问题。 -
becz,我正在学习 JS,我一直在练习,这是我的尝试:jsfiddle.net/yn60j368/1
-
没关系,我们都还在学习中。它只是帮助人们在看到您尝试解决问题的方式以及您的代码中是否有任何可以轻松修复的错误时回答您的问题。
-
是的,来自
class="label"的多个文本组,意味着如果class="label"上有不同的文本,请创建新组。我的意思是只有在class="label"上有不同的文字时才拆分,希望你理解:-)
标签: javascript jquery html replace