如何排序我的 html table
How to sort my html table
我有使用 Javascript 从中构建 html table 的通用数据,仅如下所示:
HTML:
<div id="container"></div>
Javascript:
var dataset = [ { "field1":"val1", "field2":"val2", "field3":"val3" }, { "field1":"val4", "field2":"val5", "field3":"val6", "field4":"val7" } ] ;
function addHeaders(table, keys) {
var row = table.insertRow();
for( var i = 0; i < keys.length; i++ ) {
var cell = row.insertCell();
cell.appendChild(document.createTextNode(keys[i]));
}
}
var max_keys = 0;
var max_idx = 0;
for( var i = 0; i < dataset.length; i++ ) {
var child = dataset[i];
cur_keys = Object.keys(child).length;
if (cur_keys > max_keys) {
max_keys = cur_keys;
max_idx = i;
}
}
var table = document.createElement('table');
addHeaders(table, Object.keys(dataset[max_idx]));
for( var i = 0; i < dataset.length; i++ ) {
var child = dataset[i];
var row = table.insertRow();
Object.keys(child).forEach(function(k) {
var cell = row.insertCell();
cell.appendChild(document.createTextNode(child[k]));
})
}
document.getElementById('container').appendChild(table);
我如何允许用户对列进行升序和降序排序?
更新:
排序代码适用于字符串但不适用于数字!!
dataset.sort(function (a, b) {
var nameA = Number(a.field2);
var nameB = Number(b.field2);
return (nameA - nameB);
});
我会预先 sort 数据集 (dataset.sort(...)
),并在每次排序顺序(和数据集)发生变化时重新创建 table 行。
或者使用一些已经为你完成的东西,比如 Bootstrap tables.
编辑:
纯排序 JavaScript:
const dataset = [ { "field1":1, "field2":"val2", "field3":"val3" }, { "field1":4, "field2":"val5", "field3":"val6", "field4":"val7" } ];
升序(字段 1):dataset.sort((a,b) => a.field1 - b.field1)
描述(字段 1):dataset.sort((a,b) => b.field1 - a.field1)
编辑2:
如果您正在使用字符串,请记住先将它们转换为 Number
:
dataset.sort((a,b) => Number(a.field1) - Number(b.field1))
我有使用 Javascript 从中构建 html table 的通用数据,仅如下所示:
HTML:
<div id="container"></div>
Javascript:
var dataset = [ { "field1":"val1", "field2":"val2", "field3":"val3" }, { "field1":"val4", "field2":"val5", "field3":"val6", "field4":"val7" } ] ;
function addHeaders(table, keys) {
var row = table.insertRow();
for( var i = 0; i < keys.length; i++ ) {
var cell = row.insertCell();
cell.appendChild(document.createTextNode(keys[i]));
}
}
var max_keys = 0;
var max_idx = 0;
for( var i = 0; i < dataset.length; i++ ) {
var child = dataset[i];
cur_keys = Object.keys(child).length;
if (cur_keys > max_keys) {
max_keys = cur_keys;
max_idx = i;
}
}
var table = document.createElement('table');
addHeaders(table, Object.keys(dataset[max_idx]));
for( var i = 0; i < dataset.length; i++ ) {
var child = dataset[i];
var row = table.insertRow();
Object.keys(child).forEach(function(k) {
var cell = row.insertCell();
cell.appendChild(document.createTextNode(child[k]));
})
}
document.getElementById('container').appendChild(table);
我如何允许用户对列进行升序和降序排序?
更新: 排序代码适用于字符串但不适用于数字!!
dataset.sort(function (a, b) {
var nameA = Number(a.field2);
var nameB = Number(b.field2);
return (nameA - nameB);
});
我会预先 sort 数据集 (dataset.sort(...)
),并在每次排序顺序(和数据集)发生变化时重新创建 table 行。
或者使用一些已经为你完成的东西,比如 Bootstrap tables.
编辑:
纯排序 JavaScript:
const dataset = [ { "field1":1, "field2":"val2", "field3":"val3" }, { "field1":4, "field2":"val5", "field3":"val6", "field4":"val7" } ];
升序(字段 1):dataset.sort((a,b) => a.field1 - b.field1)
描述(字段 1):dataset.sort((a,b) => b.field1 - a.field1)
编辑2:
如果您正在使用字符串,请记住先将它们转换为 Number
:
dataset.sort((a,b) => Number(a.field1) - Number(b.field1))