gpt4 book ai didi

javascript - 如何自定义这个已经自定义的 jQuery 排序解决方案?

转载 作者:行者123 更新时间:2023-11-30 13:43:32 27 4
gpt4 key购买 nike

我找到了以下解决方案来为 jQuery 添加排序功能(引用:jQuery sort())。我已经更改了解决方案以对未知长度的字符串进行排序。它工作得很好,但是正如您可能从函数名称中注意到的那样:它按升序排序 :-)。

jQuery.fn.sort = function() {  
return this.pushStack( [].sort.apply( this, arguments ), []);
};

function sortStringAscending(a,b){
var h1 = a.innerHTML;
var h2 = b.innerHTML;
var c = 0;
var str1 = null,
var str2 = null;

while(str1 == str2 && (c < h1.length && c < h2.length)) {
str1 = h1.substring(c,c+1).toLowerCase().charCodeAt(0);
str2 = h2.substring(c,c+1).toLowerCase().charCodeAt(0);

if(str1 > str2) {
r = 1;
} else if(str2 > str1) {
r = -1;
}

c += 1;
}
return r;
};

函数的用法是这样的:

$('ol li').sort(sortStringAscending).appendTo('ol');

是否可以更改此代码以使以下成为可能?

$('ol li').sort(sortString, 0).appendTo('ol');  //0 for descending
$('ol li').sort(sortString, 1).appendTo('ol'); //1 for ascending

最佳答案

您将无法轻松地将附加参数添加到 jQuery.fn.sort 使用的数组排序函数中。

使用两个单独的函数会更容易,一个用于升序,一个用于降序,但将实际比较保留在第三个函数中。

function sortStringAscending(a,b) {
return sortString(a,b,1);
};
function sortStringDescending(a,b) {
return sortString(a,b,-1);
};
function sortString(a,b,direction) {
var h1 = a.innerHTML.toLowerCase();
var h2 = b.innerHTML.toLowerCase();

if(h1 > h2) {
r = 1*direction;
} else if(h2 > h1) {
r = -1*direction;
}
return r;
};

另请注意,您可以简单地比较两个字符串,无需逐个字符地比较它们,除非您希望对诸如“abc”和“abcd”之类的项目进行不可预测的排序。

那么你应该可以做到

$('ol li').sort(sortStringAscending).appendTo('ol');
$('ol li').sort(sortStringDescending).appendTo('ol');

关于javascript - 如何自定义这个已经自定义的 jQuery 排序解决方案?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/887207/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com