通过将文本替换为类来包装/破坏列表元素 [英] Wrap/Break List elements by replace text to class
本文介绍了通过将文本替换为类来包装/破坏列表元素的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我的问题是如何通过添加从列表项文本中查找的类来包装/破坏列表项,例如以下示例?
我在这里的相关问题:按类名称包装列表元素
My question is how to Wrap/Break list items by add Class find from list items text, example below?
My related question here: 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"
示例中的文本(第二HTML),将类添加到父级ul
中.
I mean break list items in two parts like second HTML example. Add class to both parent ul
by replace text find from class="label"
example given above (second HTML).
如何仅通过jQuery/JS做到这一点?这是我尝试过的:
How can I do this simply by jQuery/JS ? Here is what I tried:
$(".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
}));
});
});
谢谢.
推荐答案
您可以使用.each()
,$.each()
,.html()
,.text()
,.trim()
var arr = []; // array to store `li` elements
var widget = $(".widget-content");
$(".widget-content li").each(function(index, el) {
var html = el.outerHTML;
// number at `label` text
var curr = $(".label", this).text().trim().slice(-1);
if (arr[curr - 1]) {
arr[curr - 1].push(html)
} else {
arr[curr - 1] = [html];
}
});
widget.html(""); // remove existing `html`
$.each(arr, function(key, val) {
var li = val.join("");
$(".widget-content").append($("<ul/>", {
html: li,
"class":$(li).eq(0).find(".label").text().trim()
}))
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js">
</script>
<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>
这篇关于通过将文本替换为类来包装/破坏列表元素的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文