【发布时间】:2020-09-09 16:14:24
【问题描述】:
我有一个可以使用关键字搜索的表格,但还希望包含一个下拉框,该下拉框也将成为过滤的一部分。下面是我的代码。我可以从下拉列表中选择一个状态,这将过滤状态,但只要我输入关键字,它就会恢复为所有状态。我想先使用 drop sown 按状态过滤,然后仅使用该状态的关键字。
HTML
<!DOCTYPE html>
<html lang="en">
<html>
<head>
<title>States</title>
<meta name="viewport" content="width=device-width">
</head>
<body>
<div id="container">
<div id="Header">
</div>
<div id="MainBody">
<h2>Search</h2>
<input type="text" id="myInputJob" onkeyup="myFunction()" placeholder="" title="Type Here">
<select id="StateDropdown" oninput="filterTable()">
<option>All</option>
<option>CA</option>
<option>WA</option>
</select>
<div id="TableJob">
<table id="myTableJob">
<tr class="header">
<th>City</th>
<th>State</th>
<th>Keyword1</th>
<th>Keyword2</th></tr>
<tr><td>San Francisco</td><td>CA</td><td>Blue</td><td>Red</td></tr>
<tr><td>San Diego</td><td>CA</td><td>Blue</td><td>Red</td></tr>
<tr><td>Seattle</td><td>WA</td><td>Blue</td><td>Red</td></tr>
<tr><td>Salt Lake City</td><td>UT</td><td>Blue</td><td>Red</td></tr>
<tr><td>Las Vegas</td><td>NV</td><td>Blue</td><td>Red</td></tr>
</table>
</div>
</div>
</body>
</html>
JS
<script>
function myFunction(event) {
var input, filter, table, tr, td, i;
input = document.getElementById("myInputJob");
filter = input.value.toUpperCase();
table = document.getElementById("myTableJob");
tr = table.getElementsByTagName("tr");
for (i = 0; i < tr.length; i++) {
table.style.display = ""
if (document.getElementById('myInputJob').value == '') {
table.style.display = "";
} else {
table.style.display = "";
}
td_1 = tr[i].getElementsByTagName("td")[2];
td_2 = tr[i].getElementsByTagName("td")[3];
td_3 = tr[i].getElementsByTagName("td")[1];
if (td_1 || td_2) {
if (td_1.innerHTML.toUpperCase().indexOf(filter) == 0 || td_2.innerHTML.toUpperCase().indexOf(filter) == 0 && td_3.innerHTML == document.getElementById("StateDropdown").innerHTML) {
tr[i].style.display = "";
} else {
tr[i].style.display = "none";
}
}
}
}
function filterTable() {
let dropdown, table, rows, cells, state, filter;
dropdown = document.getElementById("StateDropdown");
table = document.getElementById("myTableJob");
rows = table.getElementsByTagName("tr");
filter = dropdown.value;
for (let row of rows) {
cells = row.getElementsByTagName("td");
state = cells[1] || null;
if (filter === "All" || !state || (filter === state.textContent)) {
row.style.display = "";
}
else {
row.style.display = "none";
}
}
}
</script>
我觉得我需要在里面放一个 AND 条件,像这样
如果 (td_1.innerHTML.toUpperCase().indexOf(filter) == 0 || td_2.innerHTML.toUpperCase().indexOf(filter) == 0 && td_3.innerHTML == document.getElementById( "StateDropdown").innerHTML) { 但这不起作用。非常感谢!
【问题讨论】:
标签: javascript html