[英]Table Row Filtering for All Columns TD in Javascript
I have here textbox working for filtering columns inside the table column 0. But I want is that all columns will be filtered instead of just column 0.我在这里使用文本框来过滤表列 0 中的列。但我想要的是所有列都将被过滤,而不仅仅是列 0。
Here's my jsfiddle:这是我的 jsfiddle:
function myFunction() { var input, filter, table, tr, td, i; input = document.getElementById("myInput"); filter = input.value.toUpperCase(); table = document.getElementById("myTable"); tr = table.getElementsByTagName("tr"); for (i = 0; i < tr.length; i++) { td = tr[i].getElementsByTagName("td")[0]; if (td) { if (td.innerHTML.toUpperCase().indexOf(filter) > -1) { tr[i].style.display = ""; } else { tr[i].style.display = "none"; } } } }
<input type="text" id="myInput" onkeyup="myFunction()" placeholder="Search for names.." title="Type in a name"> <table id="myTable" border="1"> <tr class="header"> <th style="width:60%;">Name</th> <th style="width:40%;">Country</th> </tr> <tr> <td>Alfreds Futterkiste</td> <td>Germany</td> </tr> <tr> <td>Berglunds snabbkop</td> <td>Sweden</td> </tr> <tr> <td>Island Trading</td> <td>UK</td> </tr> <tr> <td>Koniglich Essen</td> <td>Germany</td> </tr> <tr> <td>Laughing Bacchus Winecellars</td> <td>Canada</td> </tr> <tr> <td>Magazzini Alimentari Riuniti</td> <td>Italy</td> </tr> <tr> <td>North/South</td> <td>UK</td> </tr> <tr> <td>Paris specialites</td> <td>France</td> </tr> </table>
In addition too, I don't know how to implement this: "Filtering option shouldn't block UI, you can use progress bar."此外,我也不知道如何实现这一点:“过滤选项不应阻止 UI,您可以使用进度条。”
I included the whole sample code here that I have.我在这里包含了我拥有的整个示例代码。
All you need to do is loop through tds in each row您需要做的就是在每一行中循环遍历 tds
function myFunction() {
var input, filter, table, tr, td, i, t;
input = document.getElementById("myInput");
filter = input.value.toUpperCase();
table = document.getElementById("myTable");
tr = table.getElementsByTagName("tr");
for (i = 0; i < tr.length; i++) {
var filtered = false;
var tds = tr[i].getElementsByTagName("td");
for(t=0; t<tds.length; t++) {
var td = tds[t];
if (td) {
if (td.innerHTML.toUpperCase().indexOf(filter) > -1) {
filtered = true;
}
}
}
if(filtered===true) {
tr[i].style.display = '';
}
else {
tr[i].style.display = 'none';
}
}
}
Are you looking for some functionality like this?您是否正在寻找这样的功能? I just updated your function slightly.
我只是稍微更新了你的功能。
function myFunction() { var input, filter, table, tr, td, i; input = document.getElementById("myInput"); filter = input.value.toUpperCase(); table = document.getElementById("myTable"); var rows = table.getElementsByTagName("tr"); for (i = 0; i < rows.length; i++) { var cells = rows[i].getElementsByTagName("td"); var j; var rowContainsFilter = false; for (j = 0; j < cells.length; j++) { if (cells[j]) { if (cells[j].innerHTML.toUpperCase().indexOf(filter) > -1) { rowContainsFilter = true; continue; } } } if (! rowContainsFilter) { rows[i].style.display = "none"; } else { rows[i].style.display = ""; } } }
<input type="text" id="myInput" onkeyup="myFunction()" placeholder="Search for names.." title="Type in a name"> <table id="myTable" border="1"> <tr class="header"> <th style="width:60%;">Name</th> <th style="width:40%;">Country</th> </tr> <tr> <td>Alfreds Futterkiste</td> <td>Germany</td> </tr> <tr> <td>Berglunds snabbkop</td> <td>Sweden</td> </tr> <tr> <td>Island Trading</td> <td>UK</td> </tr> <tr> <td>Koniglich Essen</td> <td>Germany</td> </tr> <tr> <td>Laughing Bacchus Winecellars</td> <td>Canada</td> </tr> <tr> <td>Magazzini Alimentari Riuniti</td> <td>Italy</td> </tr> <tr> <td>North/South</td> <td>UK</td> </tr> <tr> <td>Paris specialites</td> <td>France</td> </tr> </table>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.