I need to sort these two tables in the same function. When I click name in first table so it will sort second table also by name.
I have this function where can sort table and it is working, but it only sorts one table.
What changes are needed to sort both tables?
JavaScript
x
32
32
1
function sortTable(table, column, asc = true) {
2
const dirModifier = asc ? 1 : -1;
3
const tBody = table.tBodies[0];
4
const rows = Array.from(tBody.querySelectorAll("tr"));
5
6
const sortedRows = rows.sort((a, b) => {
7
const aColText = a.querySelector(`td:nth-child(${ column + 1 })`).textContent.trim();
8
const bColText = b.querySelector(`td:nth-child(${ column + 1 })`).textContent.trim();
9
10
return aColText > bColText ? (1 * dirModifier) : (-1 * dirModifier);
11
});
12
13
while (tBody.firstChild) {
14
tBody.removeChild(tBody.firstChild);
15
}
16
17
tBody.append(sortedRows);
18
19
table.querySelectorAll("th").forEach(th => th.classList.remove("th-sort-asc", "th-sort-desc"));
20
table.querySelector(`th:nth-child(${ column + 1})`).classList.toggle("th-sort-asc", asc);
21
table.querySelector(`th:nth-child(${ column + 1})`).classList.toggle("th-sort-desc", !asc);
22
}
23
24
document.querySelectorAll(".table-sortable th").forEach(headerCell => {
25
headerCell.addEventListener("click", () => {
26
const tableElement = headerCell.parentElement.parentElement.parentElement;
27
const headerIndex = Array.prototype.indexOf.call(headerCell.parentElement.children, headerCell);
28
const currentIsAscending = headerCell.classList.contains("th-sort-asc");
29
30
sortTable(tableElement, headerIndex, !currentIsAscending);
31
});
32
});
JavaScript
1
52
52
1
<table class="table-sortable">
2
<thead>
3
<tr>
4
<th>name</th>
5
<th>adress</th>
6
<th>Age</th>
7
</tr>
8
</thead>
9
<tbody>
10
<tr>
11
<td>Tom</td>
12
<td>Oslo</td>
13
<td>35</td>
14
</tr>
15
<tr>
16
<td>Per</td>
17
<td>London</td>
18
<td>29</td>
19
</tr>
20
<tr>
21
<td>Hary</td>
22
<td>Madrid</td>
23
<td>30</td>
24
</tr>
25
</tbody>
26
</table>
27
<table class="table-sortable">
28
<thead>
29
<tr>
30
<th>name</th>
31
<th>adress</th>
32
<th>Age</th>
33
</tr>
34
</thead>
35
<tbody>
36
<tr>
37
<td>Tom</td>
38
<td>Oslo</td>
39
<td>35</td>
40
</tr>
41
<tr>
42
<td>Per</td>
43
<td>London</td>
44
<td>29</td>
45
</tr>
46
<tr>
47
<td>Hary</td>
48
<td>Madrid</td>
49
<td>30</td>
50
</tr>
51
</tbody>
52
</table>
Advertisement
Answer
You can run sortTable function for each table.
JavaScript
1
4
1
var tables =document.getElementsByClassName("table-sortable");
2
sortTable(tables[0], headerIndex, !currentIsAscending);
3
sortTable(tables[1], headerIndex, !currentIsAscending);
4
JavaScript
1
34
34
1
function sortTable(table, column, asc = true) {
2
const dirModifier = asc ? 1 : -1;
3
const tBody = table.tBodies[0];
4
const rows = Array.from(tBody.querySelectorAll("tr"));
5
6
const sortedRows = rows.sort((a, b) => {
7
const aColText = a.querySelector(`td:nth-child(${ column + 1 })`).textContent.trim();
8
const bColText = b.querySelector(`td:nth-child(${ column + 1 })`).textContent.trim();
9
10
return aColText > bColText ? (1 * dirModifier) : (-1 * dirModifier);
11
});
12
13
while (tBody.firstChild) {
14
tBody.removeChild(tBody.firstChild);
15
}
16
17
tBody.append(sortedRows);
18
19
table.querySelectorAll("th").forEach(th => th.classList.remove("th-sort-asc", "th-sort-desc"));
20
table.querySelector(`th:nth-child(${ column + 1})`).classList.toggle("th-sort-asc", asc);
21
table.querySelector(`th:nth-child(${ column + 1})`).classList.toggle("th-sort-desc", !asc);
22
}
23
24
document.querySelectorAll(".table-sortable th").forEach(headerCell => {
25
headerCell.addEventListener("click", () => {
26
const tableElement = headerCell.parentElement.parentElement.parentElement;
27
const headerIndex = Array.prototype.indexOf.call(headerCell.parentElement.children, headerCell);
28
const currentIsAscending = headerCell.classList.contains("th-sort-asc");
29
var tables =document.getElementsByClassName("table-sortable");
30
sortTable(tables[0], headerIndex, !currentIsAscending);
31
sortTable(tables[1], headerIndex, !currentIsAscending);
32
33
});
34
});
JavaScript
1
52
52
1
<table class="table-sortable">
2
<thead>
3
<tr>
4
<th>name</th>
5
<th>adress</th>
6
<th>Age</th>
7
</tr>
8
</thead>
9
<tbody>
10
<tr>
11
<td>Tom</td>
12
<td>Oslo</td>
13
<td>35</td>
14
</tr>
15
<tr>
16
<td>Per</td>
17
<td>London</td>
18
<td>29</td>
19
</tr>
20
<tr>
21
<td>Hary</td>
22
<td>Madrid</td>
23
<td>30</td>
24
</tr>
25
</tbody>
26
</table>
27
<table class="table-sortable">
28
<thead>
29
<tr>
30
<th>name</th>
31
<th>adress</th>
32
<th>Age</th>
33
</tr>
34
</thead>
35
<tbody>
36
<tr>
37
<td>Tom</td>
38
<td>Oslo</td>
39
<td>35</td>
40
</tr>
41
<tr>
42
<td>Per</td>
43
<td>London</td>
44
<td>29</td>
45
</tr>
46
<tr>
47
<td>Hary</td>
48
<td>Madrid</td>
49
<td>30</td>
50
</tr>
51
</tbody>
52
</table>