我正在尝试实现表格排序功能。
它需要在<td>
和<tr>
上保留类和一些数据属性,因此我的做法与我的做法略有不同在其他例子中看到。
我在排序功能中使用localeCompare()
。我遇到的问题是,在排序后,列表中的第一个和第七个项目无序 - 其余部分似乎是有序的。我尝试使用> <
改变排序功能,但我的结果相同。
任何人都可以浏览一下我的代码,看看是否有一个明显的错误,我错过了吗?
我已经在每一栏都进行了测试,它始终是第一和第二。第七。
var sort = function() {
var tbody = document.getElementById(tbody_id),
rows_len = tbody.rows.length,
col_len = tbody.rows[0].cells.length;
//console.log(rows_len, col_len);
var order_hash = [];
//loop rows
for(var i = 0; i < rows_len; i++) {
order_hash[i] = {
value:tbody.rows[i].cells[column].innerHTML,
html: tbody.rows[i].outerHTML
};
}
console.log(order_hash);
order_hash.sort(function(a, b) {
var result = a.value.localeCompare(b.value);
return (order == 'asc') ? result : (result == 0) ? 0 : (result < 1) ? 1 : -1;
});
order_hash.sort();
var html = '';
for(var i = 0; i < rows_len; i++) {
html += order_hash[i].html;
}
tbody.innerHTML = html;
order = undefined;
delete(order_hash);
};
}();
答案 0 :(得分:1)
您正在调用sort方法两次(一个自定义和一个标准),因此第二个排序将以不一致的方式对order_hash
进行排序,因为:
如果未提供compareFunction,则通过转换对元素进行排序 它们以字符串形式并以Unicode代码点顺序比较字符串。对于 例如,“Cherry”出现在“banana”之前。在数字排序中,9来了 在80之前,但由于数字被转换为字符串,“80”来了 在Unicode顺序中的“9”之前。
参考:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort
删除第二种,并且可以正常工作。