Joe*_*oel 3 javascript arrays sorting jquery
我一直在试图获得一个功能,它将按照内容对选择的li标签进行排序,但目前无济于事(至少没有速度/准确度);
$('.sortasc').live('click',function(){
var liArr = Array();
$('#licontainer').children('li').each(function(){
liArr.push($(this).html());
});
liArr.sort(alphaNumSort);
$(liArr).each(function(){
var current = this;
var clone = $('li').filter(function(){return($(this).html()==current);}).clone();
$('li').filter(function(){return($(this).html()==current);}).remove();
clone.appendTo('#tempsortbox');
});
$('#licontainer').html($('#tempsortbox').html());
$('#tempsortbox').html('')
});
Run Code Online (Sandbox Code Playgroud)
它既慢又不排序.理想情况下,它会根据位于li中的强标记的内容进行排序.
这是alphaNumSort函数,如果你感兴趣的话(这可以解决它只是蹩脚的HTML和克隆垃圾而不是真的有用)
function alphaNumSort(m,n){
try{
var cnt= 0,tem;
var a= m.toLowerCase();
var b= n.toLowerCase();
if(a== b) return 0;
var x=/^(\.)?\d/;
var L= Math.min(a.length,b.length)+ 1;
while(cnt< L && a.charAt(cnt)=== b.charAt(cnt) &&
x.test(b.substring(cnt))== false && x.test(a.substring(cnt))== false) cnt++;
a= a.substring(cnt);
b= b.substring(cnt);
if(x.test(a) || x.test(b)){
if(x.test(a)== false)return (a)? 1: -1;
else if(x.test(b)== false)return (b)? -1: 1;
else{
var tem= parseFloat(a)-parseFloat(b);
if(tem!= 0) return tem;
else tem= a.search(/[^\.\d]/);
if(tem== -1) tem= b.search(/[^\.\d]/);
a= a.substring(tem);
b= b.substring(tem);
}
}
if(a== b) return 0;
else return (a >b)? 1: -1;
}
catch(er){
return 0;
}
Run Code Online (Sandbox Code Playgroud)
}
干杯
Ale*_*ett 11
我不完全确定你的alphaNumSort函数是做什么的,但是简单的字符串比较可能就足够了.
var li = $('#licontainer li').get();
// sort the list items based on the contents of a nested strong tag
li.sort(function(a, b) {
a = $('strong', a).text();
b = $('strong', b).text();
// you may want to process the text values further here, perhaps
// running it through $.trim, reducing whitespace sequences with
// a regular expression, or lower- or upper-casing letters to
// make the comparison case-insensitive.
return (a < b) ? -1 : ((a > b) ? 1 : 0);
});
// reinsert the list items in their new order
$('#licontainer').append(li);
Run Code Online (Sandbox Code Playgroud)
这应该比临时列表方法快得多,因为它执行的DOM操作更少.原生字符串比较的使用也应该比您当前的排序算法快一点,但是如果它正在做某些特定的事情我错过了更新return语句来使用它(保留前面的行).
return alphaNumSort(a, b);
Run Code Online (Sandbox Code Playgroud)
如果这仍然太慢,您可能会通过在操作之前隐藏列表来进一步提高性能,从而阻止浏览器执行不必要的重新绘制.
var li = $('#licontainer').hide().find('li').get();
// ...
$('#licontainer').append(li).show();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2756 次 |
| 最近记录: |