我正在构建一个 jQuery 表格排序脚本。是的,是的,我知道有插件,但是摆脱别人的大衣尾巴有什么乐趣(更不用说完全缺乏学习和理解)?
所以我已经对 alpha 类型进行了很好的排序,我现在正在研究数字排序。
这么快又脏。我得到列值并将它们推入一个数组:
var counter = $(".sort tr td:nth-child("+(columnIndex+1)+")").length;
for (i = 1; i <= counter; i++) {
columnValues.push($(".sort tr:eq("+i+") td:eq("+columnIndex+")").text());
}
然后我对它们进行排序:
columnValues.sort(function(a,b){
return a-b
});
然后我检查唯一条目(这主要用于相同的名称):
$.each(columnValues, function(i, el){
if($.inArray(el, uniqueColumns) === -1) uniqueColumns.push(el);
});
然后我使用数组作为键列表从表中获取数据并推入另一个数组。这就是问题所在。对于名称,它可以正常工作,但对于数字(即 3、30、36)则不行。对于以 3 开头的排序列表,它会在 30 和/或 36 中看到 3 并抓取它。
这是我尝试过的:
for (i = 0; i < counter; i++) {
var key = uniqueColumns[i];
$(".sort tr:contains("+key+") td").each(function(){
rowValues.push($(this).text());
});
}
和:
for (i = 0; i < counter; i++) {
var key = uniqueColumns[i];
$(".sort tr td").filter(function(i){
if($(this).text() === key) {
rowValues.push($(this).text());
}
});
}
这是使用第一组代码运行代码的小提琴(比第二组更好):
更新:
也刚刚尝试过(仍然无法正常工作,适用于初始排序但不适用于后续排序):
for (i = 0; i < counter; i++) {
var key = uniqueColumns[i];
var found = false;
$(".sort tr:contains("+key+")").filter(function(j){
$(this).children().each(function(){
if ($(this).text() === key) {
found = true;
}
});
$(this).children().each(function(){
if (found) {
rowValues.push($(this).text());
}
});
});
}