javascript - 计算过滤列的总和
问题描述
我正在尝试过滤一个 html 表并计算过滤列的总和。到目前为止,过滤工作正常,但我无法更新总数。
function searchTable() {
var input, filter, found, table, tr, td, i, j;
input = document.getElementById("search");
filter = input.value.toUpperCase();
table = document.getElementById("displaytable");
tr = table.getElementsByTagName("tr");
for (i = 0; i < tr.length; i++) {
td = tr[i].getElementsByTagName("td");
for (j = 0; j < td.length; j++) {
if (td[j].innerHTML.toUpperCase().indexOf(filter) > -1) {
found = true;
}
}
if (found) {
tr[i].style.display = "";
found = false;
} else {
tr[i].style.display = "none";
}
}
}
var cls = document.getElementById("displaytable").getElementsByTagName("td");
var sum = 0;
for (var i = 0; i < cls.length; i++) {
if (cls[i].className == "countable") {
sum += isNaN(cls[i].innerHTML) ? 0 : parseInt(cls[i].innerHTML);
}
}
document.getElementById('total').innerHTML += sum;
<input type="text" id="search" onkeyup='searchTable()' placeholder="Type to search">
<table id="displaytable">
<thead>
<tr>
<th>User</th>
<th>Number</th>
</tr>
</thead>
<tbody>
<tr>
<td>John</td>
<td class="countable">5</td>
</tr>
<tr>
<td>Tom</td>
<td class="countable">4</td>
</tr>
<tr>
<td>Jordan</td>
<td class="countable">7</td>
</tr>
<tr>
<td>David</td>
<td class="countable">3</td>
</tr>
<tr>
<td>Marc</td>
<td class="countable">1</td>
</tr>
</tbody>
<tfoot class="shown">
<tr>
<td colspan="4">Total:</td>
<td id="total"></td>
</tr>
</tfoot>
</table>
当我使用过滤器时,总和不会刷新(“tfoot”消失)。我必须怎么做才能始终看到“tfoot”并更新总数?
解决方案
一个简单的方法是将 id 放在 上tbody
,然后在隐藏所有值之后再次计算总和,具体取决于td
s 的父级是否隐藏。
function searchTable() {
var input, filter, found, table, tr, td, i, j;
input = document.getElementById("search");
filter = input.value.toUpperCase();
table = document.getElementById("displaytable");
tr = table.getElementsByTagName("tr");
for (i = 0; i < tr.length; i++) {
td = tr[i].getElementsByTagName("td");
for (j = 0; j < td.length; j++) {
if (td[j].innerHTML.toUpperCase().indexOf(filter) > -1) {
found = true;
}
}
if (found) {
tr[i].style.display = "";
found = false;
} else {
tr[i].style.display = "none";
}
}
var cls = document.getElementById("displaytable").getElementsByTagName("td");
var sum = 0;
for (var i = 0; i < cls.length; i++) {
// Here you check if it's a countable class and the parent tr's style is a visible tr
if (cls[i].className == "countable" && cls[i].closest("tr").style.display != "none") {
sum += isNaN(cls[i].innerHTML) ? 0 : parseInt(cls[i].innerHTML);
}
}
document.getElementById('total').innerHTML = sum;
}
var cls = document.getElementById("displaytable").getElementsByTagName("td");
var sum = 0;
for (var i = 0; i < cls.length; i++) {
if (cls[i].className == "countable") {
sum += isNaN(cls[i].innerHTML) ? 0 : parseInt(cls[i].innerHTML);
}
}
document.getElementById('total').innerHTML += sum;
<input type="text" id="search" onkeyup='searchTable()' placeholder="Type to search">
<table>
<thead>
<tr>
<th>User</th>
<th>Number</th>
</tr>
</thead>
<tbody id="displaytable">
<tr>
<td>John</td>
<td class="countable">5</td>
</tr>
<tr>
<td>Tom</td>
<td class="countable">4</td>
</tr>
<tr>
<td>Jordan</td>
<td class="countable">7</td>
</tr>
<tr>
<td>David</td>
<td class="countable">3</td>
</tr>
<tr>
<td>Marc</td>
<td class="countable">1</td>
</tr>
</tbody>
<tfoot class="shown">
<tr>
<td colspan="4">Total:</td>
<td id="total"></td>
</tr>
</tfoot>
</table>
推荐阅读
- python - 如何检查字符串是否是熊猫系列中的第一次出现?
- npm - 将 Buefy 添加到 Nuxt 时出错
- javascript - Axios - 请求的资源上不存在“Access-Control-Allow-Origin”标头
- jquery - 需要帮助关闭同一页面上多个打开的手风琴项目,但单独的部分
- ios - 在 RealmCollectionChange 中,您如何获得第二种格式?
- python - 比较多列中的值并返回所有下降区域
- graphviz - 控制 GraphViz 子图集群中节点的顺序
- excel - 使用 Excel VBA 更改 ActiveX 对象的触发事件
- firefox - 使用来自在线资源的 policy.json 添加证书
- c++ - How can I get a method to return a pointer to a const array