我有两个过滤器,一个是 => 大于或 =< 小于一列,另一个是 => 大于和来自不同列的输入框。
我怎样才能将它们组合成一个代码,以便它们一起工作?
谢谢😃
function search() {
// Declare variables
var select, option, filter, table, tr, td_Ht, td_unf, i, cellValue;
var un_fact = document.getElementById('l_Oad')
select = document.getElementById('column_Height');
option = select.options[select.selectedIndex];
document.getElementById('value').value = option.text;
document.getElementById('text').value = option.value;
filter = parseInt(option.value);
table = document.getElementById("myTable");
tr = table.getElementsByTagName("tr");
// Loop through all table rows, and hide those who don't match the search query
for (i = 0; i < tr.length; i++) {
td_Ht = tr[i].getElementsByTagName("td")[4];
td_unf = tr[i].getElementsByTagName("td")[1];
if (td_Ht) {
cellValue = parseInt(td_Ht.innerHTML);
if ((cellValue >= option.text) && (cellValue <= option.value)) {
tr[i].style.display = "";
} else {
tr[i].style.display = "none";
}
}
}
}
function search_UnF() {
// Declare variables
var filter, table, tr, td_unf, i, cellValue;
var un_fact = document.getElementById('l_oad')
filter = parseInt(un_fact.value);
table = document.getElementById("myTable");
tr = table.getElementsByTagName("tr");
// Loop through all table rows, and hide those who don't match the search query
for (i = 0; i < tr.length; i++) {
td_unf = tr[i].getElementsByTagName("td")[1];
if (td_unf) {
cellValue = parseInt(td_unf.innerHTML);
if (cellValue >= filter) {
tr[i].style.display = "";
} else {
tr[i].style.display = "none";
}
}
}
}
* {
box-sizing: border-box;
}
.row {
margin-left:-5px;
margin-right:-5px;
}
.column {
float: left;
width: 50%;
padding: 5px;
}
/* Clearfix (clear floats) */
.row::after {
content: "";
clear: both;
display: table;
}
table {
border-collapse: collapse;
border-spacing: 0;
width: 100%;
border: 1px solid #ddd;
}
th, td {
text-align: left;
padding: 16px;
}
table, th, td {
border: 1px solid rgb(8, 18, 1);
border-collapse: collapse;
}
tr:nth-child(even) {
background-color: #f2f2f2;
}
table {
border-collapse: collapse;
}
td {
border: 1px solid #ccc;
}
th, td {
padding: 10px;
text-align: left;
}
tr:nth-child(even) {
background-color: rgb(30, 131, 5);
}
tr:nth-child(odd) {
background-color: rgb(36, 84, 25);
}
#column_Height{
width:60px;
}
<h2>COLUMNS</h2>
<label for="column_Height">Column Height:</label>
<select id="column_Height" onChange="search()" ;>
<option value="">Select</option>
<option value="90">89</option>
<option value="96">90</option>
<option value="102">96</option>
<option value="120">102</option>
<option value="144">120</option>
<option value="168">144</option>
<option value="192">168</option>
<option value="216">192</option>
<option value="216">216</option>
</select>
<label for="value">Between</label>
<input type="text" id="value" size="4" disabled>
<label for="text">and</label>
<input type="text" id="text" size="4" disabled>
<label for="l_oad">Enter Unfactored</label>
<input type="text" id="l_oad" onkeyup="search_UnF()" placeholder="Unfactored.." title="Load" size="15">
<h2>Posts and Plate/Saddles</h2>
<p>Post selector and top Plates for spliced beams:</p>
<div class="row">
<div class="column">
<table id="myTable">
<tr class="header">
<th style="width:25%;">PRODUCT</th>
<th style="width:12.5%;">UNFACT</th>
<th style="width:12.5%;">EXT</th>
<th style="width:35%;">BASE/TOP</th>
<th style="width:10%;">HeiGHT</th>
</tr>
<tr>
<td>STS-7.5 - NS</td>
<td>11190</td>
<td>7' 6"</td>
<td>B 4"x4" / T 3.5"x5.25"</td>
<td>90</td>
</tr>
<tr>
<td>STS-8.0 - NS</td>
<td>10175</td>
<td>8'0"</td>
<td>B 4"x4" / T 3.5"x5.25*</td>
<td>96</td>
</tr>
<tr>
<td>STS-8.5</td>
<td>9200</td>
<td>8' 6"</td>
<td>B 4"x4" / T 3.5"x5.25"</td>
<td>102</td>
</tr>
<tr>
<td>STS-10</td>
<td>7050</td>
<td>10' 0"</td>
<td>B 4"x4" / T 3.5"x5.25"</td>
<td>120</td>
</tr>
<tr>
<td>STL-7.4 - NS</td>
<td>17080</td>
<td>7' 5"</td>
<td>Larger Top Plate Req'd.</td>
<td>89</td>
</tr>
<tr>
<td>STL-8.0 - NS</td>
<td>15720</td>
<td>8' 0"</td>
<td>4"x6" 5"x7"</td>
<td>96</td>
</tr>
<tr>
<td>STL-8.5</td>
<td>14400</td>
<td>8' 6"</td>
<td>4"x6' 5"x7"</td>
<td>102</td>
</tr>
<tr>
<td>STL-10</td>
<td>11300</td>
<td>10' 0"</td>
<td>4"x6" 5"x7"</td>
<td>120</td>
</tr>
<tr>
<td>STM1-7.4 - NS</td>
<td>26070</td>
<td>7' 5"</td>
<td>4"x8" 6"x8"</td>
<td>89</td>
</tr>
<tr>
<td>STM1-8.0 - NS</td>
<td>24390</td>
<td>8' 0"</td>
<td>4 x8 6 x8</td>
<td>96</td>
</tr>
<tr>
<td>STM1-8.5</td>
<td>22730</td>
<td>8' 6"</td>
<td>4"x8" 6"x8"</td>
<td>102</td>
</tr>
<tr>
<td>STM1-10</td>
<td>18300</td>
<td>10' 0"</td>
<td>4"x8", 6"x8"</td>
<td>120</td>
</tr>
<tr>
<td>STM1-12</td>
<td>13970</td>
<td>12' 0"</td>
<td>4"x8" 6"x8"</td>
<td>144</td>
</tr>
<tr>
<td>STM1-14</td>
<td>10830</td>
<td>14' 0"</td>
<td>4"x8" 6" x8"</td>
<td>168</td>
</tr>
<tr>
<td>STM2-8.0 - NS</td>
<td>34140</td>
<td>8' 0"</td>
<td>4"x8" 6"x8"</td>
<td>96</td>
</tr>
<tr>
<td>STM2-8.5</td>
<td>31730</td>
<td>8' 6"</td>
<td>4"x8" 6"x8"</td>
<td>102</td>
</tr>
<tr>
<td>STM2-10</td>
<td>25600</td>
<td>10' 0"</td>
<td>4"x8" 6"x8"</td>
<td>120</td>
</tr>
<tr>
<td>STM2-12</td>
<td>19390</td>
<td>12' 0"</td>
<td>4"x8" 6"x8"</td>
<td>144</td>
</tr>
<tr>
<td>STM2-14</td>
<td>15000</td>
<td>14' 0"</td>
<td>4"x8" 6"x8"</td>
<td>168</td>
</tr>
<tr>
<td>STM2-16</td>
<td>11840</td>
<td>16' 0"</td>
<td>4"x8" 6"x8"</td>
<td>192</td>
</tr>
<tr>
<td>STH-8.0 - NS</td>
<td>48200</td>
<td>8' 0"</td>
<td>B6"x6" / T7"x10"</td>
<td>96</td>
</tr>
<tr>
<td>STH-8.5</td>
<td>45500</td>
<td>8' 6"</td>
<td>B 6"x6" / T 7"x10"</td>
<td>102</td>
</tr>
<tr>
<td>STH-10</td>
<td>37740</td>
<td>10' 0"</td>
<td>B 6"x6" / T 7"x10"</td>
<td>120</td>
</tr>
<tr>
<td>STH-12</td>
<td>29640</td>
<td>12' 0"</td>
<td>B 6"x6" / T7"x10"</td>
<td>144</td>
</tr>
<tr>
<td>STH-14</td>
<td>23390</td>
<td>14' 0"</td>
<td>B 6"x6" / T 7"x10"</td>
<td>168</td>
</tr>
<tr>
<td>STH-16</td>
<td>18750</td>
<td>16' 0"</td>
<td>B 6"x6" / T7"x10"</td>
<td>192</td>
</tr>
<tr>
<td>STXH-8.0 - NS</td>
<td>80070</td>
<td>8' 0"</td>
<td>Larger Top Plate Req'd</td>
<td>96</td>
</tr>
<tr>
<td>STXH-8.5</td>
<td>76210</td>
<td>8' 6"</td>
<td>B 8"x8" / T7"x14"</td>
<td>102</td>
</tr>
<tr>
<td>STXH-10</td>
<td>65090</td>
<td>10' 0"</td>
<td>B 8"x8" / T 7"x14"</td>
<td>120</td>
</tr>
<tr>
<td>STXH-12</td>
<td>52300</td>
<td>12' 0"</td>
<td>B 8"x8" / T7"x14"</td>
<td>144</td>
</tr>
<tr>
<td>STXH-14</td>
<td>42200</td>
<td>14' 0"</td>
<td>B 8"x8" / T 7"x14"</td>
<td>168</td>
</tr>
<tr>
<td>STXH-16</td>
<td>34340</td>
<td>16' 0"</td>
<td>B 8"x8* / T 7nx14"</td>
<td>192</td>
</tr>
<tr>
<td>STXH-18</td>
<td>28170</td>
<td>18' 0"</td>
<td>B 8"x8" / T 7"x14"</td>
<td>216</td>
</tr>
</table>
回答1
好吧,您可以创建单独的函数来告诉您何时过滤一行。每个函数都有检查过滤器所需的行和其他参数:
function filterSearch(tr, text, value) {
let td_Ht = tr.getElementsByTagName("td")[4];
let td_unf = tr.getElementsByTagName("td")[1];
if (td_Ht) {
let cellValue = parseInt(td_Ht.innerHTML);
return cellValue < text || cellValue > value;
}
}
function filterUnF(tr, filter) {
if (isNaN(filter))
return false;
let td_unf = tr.getElementsByTagName("td")[1];
if (td_unf) {
let cellValue = parseInt(td_unf.innerHTML);
return cellValue < filter);
}
}
然后,您迭代所有行,并且对于每一行,您检查它是否通过了过滤器:
function search() {
// Declare variables
var select, option, filter, table, tr, td_Ht, td_unf, i, cellValue;
var un_fact = document.getElementById('l_oad')
select = document.getElementById('column_Height');
option = select.options[select.selectedIndex];
document.getElementById('value').value = option.text;
document.getElementById('text').value = option.value;
filter = parseInt(option.value);
table = document.getElementById("myTable");
tr = table.getElementsByTagName("tr");
filterUn = parseInt(un_fact.value);
// Loop through all table rows, and hide those who don't match the search query
for (i = 1; i < tr.length; i++) {
td_Ht = tr[i].getElementsByTagName("td")[4];
td_unf = tr[i].getElementsByTagName("td")[1];
var filter = filterSearch(tr[i], option.text, option.value) ||
filterUnF(tr[i], filterUn);
tr[i].style.display = filter ? "none" : "";
}
}
注意:在您的代码 document.getElementById('l_Oad')
中,您使用的是零而不是字母 o。
在 for 中,我从 1 索引开始,因为我知道 0 是标题。