Javascript 将列表项目包装为两个ul
尝试包装/拆分列表项并通过替换列表项中的文本来添加类,如下例 原始Html:Javascript 将列表项目包装为两个ul,javascript,jquery,html,replace,Javascript,Jquery,Html,Replace,尝试包装/拆分列表项并通过替换列表项中的文本来添加类,如下例 原始Html: <div class="widget-content"> <ul> <li><span class="label">textone</span> Test Content</li> <li><span class="label">texttwo</span> Test Co
<div class="widget-content">
<ul>
<li><span class="label">textone</span> Test Content</li>
<li><span class="label">texttwo</span> Test Content</li>
<li><span class="label">texttwo</span> Test Content</li>
<li><span class="label">texttwo</span> Test Content</li>
<li><span class="label">textone</span> Test Content</li>
<li><span class="label">textone</span> Test Content</li>
</ul>
</div>
不工作,请检查。
提前感谢。这里有一个解决方案,根据
.label
var-widget=$('.widget-content'),
ul=widget.find('ul'),
类=[‘左’、‘右’];
ul.find('li')。每个(函数(){
var span=$(this.find('.label');
var text=span.text();
var parent=widget.find('[data parent=“'+text+''”]);
if(parent.length==0){
widget.append($(“”).append(此))
}否则{
parent.append(这个)
}
ul.移除();
});代码>
.left{color:green}
.right{color:blue}
- textone测试内容
- 文本二测试内容
- 文本二测试内容
- 文本二测试内容
- textone测试内容
- textone测试内容
遵循您的代码(相同的原则),这是另一种解决方案:
var$widget=$('.widget-content');
var元素={};
$widget.find('li')。每个(函数(){
var key=$(this.find('span').text();
//如果键还没有定义,我们就定义一个数组
元素[键]=元素的类型[键]=“未定义”?[]:元素[键];
//添加
元素[key].push($(this).text());
}).parent().remove();//清除
$。每个(元素、函数(索引、值){
var$ul=$(“
”).addClass(索引);
$.each(值、函数(){
$ul.append($('').text(this));
});
$widget.append($ul);
});代码>
.textone{
颜色:红色;
}
.text2{
颜色:蓝色;
}
- textone测试内容
- 文本二测试内容
- 文本二测试内容
- 文本二测试内容
- textone测试内容
- textone测试内容
jquerywrapAll()
是另一种简短而甜蜜的方式
// get unique texts
var uniTxt = [];
$('.label').text(function(index,txt){
( $.inArray(txt,uniTxt) > -1) ? null : uniTxt.push( txt ) ;
});
// rearrange items
$(uniTxt).each(function(index, className){
$('li').filter(':contains('+className+')')
.unwrap() // remove initial parent ul
.wrapAll('<ul class='+className+'>'); // wraps similar txt with a Ul & add class
});
//获取唯一文本
var uniTxt=[];
$('.label').text(函数(索引,txt){
($.inArray(txt,uniTxt)>-1)?null:uniTxt.push(txt);
});
//重新排列项目
$(uniTxt).each(函数(索引,类名){
$('li').filter(':包含('+className+'))
.unwrap()//删除初始父对象
.wrapAll(“”);//用ul&add类包装类似的文本
});
那么,你是想每三项就把清单分成两半,还是以其他方式?它不是很清楚你肯定不是由span的内容决定的,因为这似乎就是我想要的输出,比如第二个HTML示例,通过替换文本内容从span class=“label”
获取类。检查第二个HTML示例。我想要它。嗨,想要一个简单的改变:如何给新的父级赋予太平洋类名ul
。?不要用文本替换class=“label”
我的意思是将不同的自定义类名更改为不同的父级“ul”,那么您希望使用什么类名,你需要具体说明你想要什么第一个ul
将是类名left
,第二个ul
将是类名right
编辑答案以添加这些类,并使它们更容易更改为你想要的任何名称,以便将太平洋类名赋予新的父类ul
。?不要从class=“label”
中替换文本,只需更改index
行var$ul=$(“
”)上的值即可。addClass(index)代码>与您的pacific
类。我的意思是将不同的自定义类名更改为不同的父级“ul”
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()
}))
})
// get unique texts
var uniTxt = [];
$('.label').text(function(index,txt){
( $.inArray(txt,uniTxt) > -1) ? null : uniTxt.push( txt ) ;
});
// rearrange items
$(uniTxt).each(function(index, className){
$('li').filter(':contains('+className+')')
.unwrap() // remove initial parent ul
.wrapAll('<ul class='+className+'>'); // wraps similar txt with a Ul & add class
});