【发布时间】:2019-08-04 09:49:04
【问题描述】:
我需要按名称对表格进行排序。对于排序,我使用函数
function sortArray(index) {
let arr = [];
rows.forEach( elem => {
arr.push(elem.children[index].textContent);
})
let sort = arr.sort( (a, b) => {
if ( a > b) {
return 1;
}
if (a < b) {
return -1;
}
return 0;
});
console.log(sort);
return sort;
}
但我不知道如何重绘表格。我从 JSON 文件动态创建的表。为了开始排序,您需要单击字段名称,然后应该会显示已排序的表格。
const buildHeader = data =>
Object.keys(data)
.map(k => `<th>${k}</th>`)
.join("");
const buildRow = data =>
Object.keys(data)
.map(k => `<td>${data[k]}</td>`)
.join("");
let element = document.querySelector(".people");
function showPeople(people) {
let table = document.createElement("table");
table.classList.add("people__table");
let thead = document.createElement("thead");
thead.innerHTML = `<tr class="head">${buildHeader(people[0])}</tr>`;
table.appendChild(thead);
let tbody = document.createElement("tbody");
tbody.innerHTML = people
.map(p => `<tr class="person">${buildRow(p)}</tr>`)
.join("");
table.appendChild(tbody);
element.appendChild(table);
}
const customPeople = data =>
data.map((p, i) => {
return {
name: p.name,
sex: p.sex,
born: p.born,
died: p.died,
age: p.died - p.born,
mother: p.mother,
father: p.father,
};
});
showPeople(customPeople(ANCESTRY_FILE));
【问题讨论】:
-
如果一开始就从JSON动态创建表,可以不对排序后的数据重复这个过程吗?
-
除此之外:这种方法有效,但 innerHTML 并不是真正必要的。 HTMLTableElement 带有
createTHeadinsertRow等表格创建方法。同样,HTMLTableRow 包含insertCell、deleteCell等方法。 -
@Lewis 当然可以,但是如何通过点击字段名称来对这些数据进行排序
标签: javascript sorting html-table