我的语法有些困难。
JS
function sortAlpha(a,b){
return a.innerHTML > b.innerHTML ? 1 : -1;
};
$('.brick ul li').each(function() {
$(this).sort(sortAlpha).appendTo('ul');
});
HTML
<div id="studio" class="brick">
<div class="listlist">
<h3 class="title">Studio</h3>
<ul class="list">
<li class="odd">
<a href="#">
<span class="title">Apple</span>
</a>
</li>
<li class="even">
<span class="title"><a href="#">Cat</span>
</a>
</li>
<li class="odd">
<span class="title">
<a href="#">Bar</span>
</a>
</li>
</ul>
</div>
</div>
我想将$this
li
附加到自己的父ul
而不是所有列表
编辑:只是为了确保我选择了正确的li和父母。感谢
答案 0 :(得分:1)
您可以使用closest()
方法遍历DOM并找到父级的UL
-
$(this).sort(sortAlpha).appendTo($(this).closest('ul'));
答案 1 :(得分:0)
如果您不确定父元素,请使用此
$(this).sort(sortAlpha).appendTo($(this).parent("ul"));
如果您仍然不确定父母是否会在DOM树之上,那么请使用.closest()
$(this).sort(sortAlpha).appendTo($(this).closest("ul"));
但是,如果您使用ul
id
,效果会更好
<ul id="meParent">
...
</ul>
然后
$(this).sort(sortAlpha).appendTo("#meParent");
答案 2 :(得分:0)
你有不准确的html
,没有正确嵌套,不管怎样,你可以试试这个,我已经回答假设第一个li
有正确的嵌套,如下所示
<li class="odd">
<a href="#">
<span class="title">Apple</span>
</a>
</li>
// Sorter
function sorter(){
var arr=[], len=$('.brick').find('ul.list li').length;
$('.brick ul.list li').each(function(i) {
var el=$(this).find('a span').text();
arr.push(el);
if(i==(len-1))
{
arr=sortAlpha(arr);
var ul=$(this).closest('ul.list').empty();
$.each(arr, function(k, v){
var cls=(k%2) ? 'even':'odd',
li=$('<li/>', {'class':cls}),
a=$('<a/>',{'href':'#'}).append($('<span/>', {'class':'title'}).text(v));
ul.append(li.append(a));
});
}
});
}
//Sort helper
function sortAlpha(list){
var result = [], map = [];
for (var i=0, length = list.length; i < length; i++) {
map.push({ index: i, value: list[i].toLowerCase() });
}
map.sort(function(a, b) {
return a.value > b.value ? 1 : -1;
});
for (var i=0, length = map.length; i < length; i++) {
result.push(list[map[i].index]);
}
return result;
}