我有一个<ul>
的嵌套<ul>
,<ul>
位于<li>
,而<ul>
下的所有<span>
都包含<li>
。我想根据各自<span>
<ul id="rootUl">
<li>
<span>zz</span>
</li>
<li>
<ul>
<li><span>rr</span></li>
<li><span>bb</span></li>
<li><span>hh</span></li>
</ul>
<li>
<span>kk</span>
</li>
<li>
<span>mm</span>
</li>
</ul>
项目进行排序
这里是样本
<ul id="rootUl">
root <ul>
将始终存在,但此<ul>
中的所有元素都是动态生成的。
目前我正在尝试将所有<ul id="rootUl">
放在数组中的<ul id="rootUl">
<li>
<span>kk</span>
</li>
<li>
<ul>
<li><span>bb</span></li>
<li><span>hh</span></li>
<li><span>rr</span></li>
</ul>
<li>
<span>mm</span>
</li>
<li>
<span>zz</span>
</li>
</ul>
下,并将它们逐个传递给排序函数。
这是小提琴http://jsfiddle.net/6tvzhkvk/2/
给定样本的预期结果将类似于
{{1}}
答案 0 :(得分:3)
// for each <ul> separately
$('#rootUl ul, #rootUl').each(function(_, ul) {
// get all the nodes to be sorted
var $toSort = $(ul).children('li').children('span');
// extract the text
var values = $toSort.get().map(function(span) {
return span.textContent;
});
// sort the text
values.sort();
// shove reordered texts back into the original elements
values.forEach(function(value, index) {
$toSort[index].textContent = value;
});
});
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<ul id="rootUl">
<li>
<span>zz</span>
</li>
<li>
<ul>
<li><span>rr</span></li>
<li><span>bb</span></li>
<li><span>hh</span></li>
</ul>
<li>
<span>kk</span>
</li>
<li>
<span>mm</span>
</li>
</ul>
&#13;
答案 1 :(得分:0)
试试这个Fiddle
JS代码:
$('#sortTree').click(function () {
var items = $('#rootul > li').get();
var nestedItems = $('#rootul > li > ul > li').get();
items = sort(items);
adjustItems('#rootul', items);
nestedItems = sort(nestedItems);
adjustItems('#rootul > li > ul', nestedItems);
});
function sort(items) {
items.sort(function(a,b){
var keyA = $(a).text();
var keyB = $(b).text();
if (keyA < keyB) return -1;
if (keyA > keyB) return 1;
return 0;
});
return items;
}
function adjustItems(sel, items) {
var ul = $(sel);
$.each(items, function(i, li){
ul.append(li);
});
}