对具有相同类级别的不同li元素进行排序
Sort different li elements with same class level
我有一个无序列表,如下
<ul>
<li class="A">abb</li>
<li class="B">dbb</li>
<li class="C">zbb</li>
<li class="C">abb</li>
<li class="B">ybb</li>
<li class="C">abb</li>
<li class="C">zbb</li>
<li class="C">zab</li>
<li class="A">zbb</li>
<li class="A">xbb</li>
<li class="A">cbb</li>
<li class="B">bbb</li>
<li class="C">cbb</li>
<li class="C">abb</li>
</ul>
这是一个grand parent
>parent
>child
关系,我希望在保持个人关系结构的同时按字母顺序排列它们。不幸的是,导入时无法更改标记,因为它是在其他地方生成的。
期望输出:
<ul>
<li class="A">abb</li>
<li class="B">dbb</li>
<li class="C">abb</li>
<li class="C">zbb</li>
<li class="B">ybb</li>
<li class="C">abb</li>
<li class="C">zab</li>
<li class="C">zbb</li>
<li class="A">cbb</li>
<li class="B">bbb</li>
<li class="C">abb</li>
<li class="C">cbb</li>
<li class="A">xbb</li>
<li class="A">zbb</li>
</ul>
我以前从未遇到过这个问题。每当我不得不订购一份清单时,我都会订购整个清单。有人对我如何处理这个问题有什么聪明的建议或建议吗。
当前Fiddlehttp://jsfiddle.net/p70Lagyp/
它不漂亮,可以迭代多次,但这应该能在中工作
$('li').each(function() {
$(this).nextUntil('.' + this.className).appendTo(this);
}).each(function() {
$(this).siblings('.' + this.className).addBack().sort(function(a,b) {
var _a = $(a).clone(),
_b = $(b).clone();
_a.add(_b).children().remove();
return _a.text().localeCompare( _b.text() );
}).appendTo($(this).parent())
}).each(function() {
var parent = $(this).parent();
if (parent.prop('tagName').toLowerCase() === 'li')
$(this).siblings('.' + this.className).addBack().insertAfter(parent);
});
解释:首先,它迭代所有LI,获得与当前元素不具有相同类的下一个元素,这将创建一个嵌套层次结构,以便能够对它们进行单独排序
当创建嵌套结构时,它会再次迭代,这一次是获得同一类的所有同级,并用addBack
将原始结构添加回,然后根据文本内容对它们进行排序,这意味着它们必须是克隆并删除子LI
最后,它将LI放回父级,撤消嵌套结构。
相关文章:
- 完全可链接的li元素
- 使用li元素的html内容更改该元素的背景
- 需要在量角器中找到使用ng中继器的li元素的数量
- 根据输入值创建li元素
- 要更改变量的高度li元素
- 为li元素添加标题
- 在不使用sort()的情况下获取HTML LI元素的副本
- 将内容从 JSON 数组附加到 li 元素
- 获取 LI 元素的偏移宽度(或等效项)
- addClass 到当前 li 元素并删除类
- 使用纯JS点击即可从li元素中获取文本和id
- Rails-使用Ajax删除li元素
- 对具有相同类级别的不同li元素进行排序
- 显示/隐藏具有不同类的li元素
- 从ul中删除li元素
- 从OL中移除LI元素
- 删除不起作用的li元素
- 从javascript生成的li a元素触发onclick
- 如何使用json对象作为li元素的id属性或使用javascript锚定标记id
- 添加和删除jquery-li元素