【发布时间】:2021-03-01 09:17:27
【问题描述】:
其实,我正在尝试创建一个特定的每列搜索。在这里,我可以使用数据类型管理第一列搜索,但使用此数据类型我无法处理其他列搜索。对于这些情况,不使用数据类型是否可以管理单个列搜索?
过程将是:如果我选择 = 运算符并在列中键入任何输入值,然后在搜索后,输入值将得到与相似值匹配的一行或多行。同样,如果我选择 运算符和此列,则将获得小于输入值的任何输入值,如果我选择 = 运算符,将获得小于或等于输入值的任何输入值,并且将获得大于或等于输入值的该列输入值。
如何解决这个问题?
const $available_qty = $("#available_quantity");
const $regular_price = $("#regular_price");
const $base_price = $("#base_price");
const $avl_table = $available_qty.closest("table");
const $rp_table = $regular_price.closest("table");
const $bp_table = $base_price.closest("table");
const $aggregate_value = $("#aggregate_condition");
const aggrFn = {
"=": (a,b) => a == b,
"<": (a,b) => a < b,
">": (a,b) => a > b,
"<=": (a,b) => a <= b,
">=": (a,b) => a >= b,
};
$('button.avl').click(function(){
const ag = $aggregate_value.val();
const av = $available_qty.val().trim();
const $rowsQty = $avl_table.find("[data-qty]")
$rowsQty.removeClass("u-none");
if (av === "") return;
$rowsQty.filter((i, el) => !aggrFn[ag](el.dataset.qty, +av)).addClass("u-none");
})
$('button.rp').click(function(){
const ag = $aggregate_value.val();
const rp = $regular_price.val().trim();
const $rowsQty = $rp_table.find("[data-qty]")
$rowsQty.removeClass("u-none");
if (rp === "") return;
$rowsQty.filter((i, el) => !aggrFn[ag](el.dataset.rp, +rp)).addClass("u-none");
})
$('button.bp').click(function(){
const ag = $aggregate_value.val();
const bp = $base_price.val().trim();
const $rowsQty = $bp_table.find("[data-qty]")
$rowsQty.removeClass("u-none");
if (bp === "") return;
$rowsQty.filter((i, el) => !aggrFn[ag](el.dataset.bp, +bp)).addClass("u-none");
})
table {
width: 100%;
border-collapse: collapse;
}
table thead th {
padding: 15px;
}
table tbody tr td{
padding: 10px;
text-align: center;
}
.text-center{
text-align: center;
}
.header-name{
display: flex;
justify-content: center;
align-items: center;
}
.u-none{
display:none;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<table>
<thead>
<th class="text-center">
Available Quantity
<div class="header-name">
<div>
<select id="aggregate_condition">
<option value="=">=</option>
<option value="<"><</option>
<option value=">">></option>
<option value="<=">≤</option>
<option value=">=">≥</option>
</select>
</div>
<div>
<input type="text" id="available_quantity">
</div>
<div>
<button class="avl" type="submit">Apply</button>
</div>
</div>
</th>
<th class="text-center">
Regular Price
<div class="header-name">
<div>
<select id="aggregate_condition">
<option value="=">=</option>
<option value="<"><</option>
<option value=">">></option>
<option value="<=">≤</option>
<option value=">=">≥</option>
</select>
</div>
<div>
<input type="text" id="regular_price">
</div>
<div>
<button class="rp" type="submit">Apply</button>
</div>
</div>
</th>
<th class="text-center">
Base Price
<div class="header-name">
<div>
<select id="aggregate_condition">
<option value="=">=</option>
<option value="<"><</option>
<option value=">">></option>
<option value="<=">≤</option>
<option value=">=">≥</option>
</select>
</div>
<div>
<input type="text" id="base_price">
</div>
<div>
<button class="bp" type="submit">Apply</button>
</div>
</div>
</th>
</thead>
<tbody>
<tr data-qty="4">
<td>4</td>
<td>10</td>
<td>12</td>
</tr>
<tr data-qty="9">
<td>9</td>
<td>12</td>
<td>11</td>
</tr>
<tr data-qty="1">
<td>1</td>
<td>14</td>
<td>12</td>
</tr>
<tr data-qty="0">
<td>0</td>
<td>8</td>
<td>10</td>
</tr>
<tr data-qty="6">
<td>6</td>
<td>14</td>
<td>18</td>
</tr>
<tr data-qty="1">
<td>1</td>
<td>11</td>
<td>22</td>
</tr>
<tr data-qty="6">
<td>6</td>
<td>10</td>
<td>8</td>
</tr>
</tbody>
</table>
【问题讨论】:
-
您的问题是常见的多重 id= 问题。你至少有两个
<select id="aggregate_condition">和$("#aggregate_condition")总是会得到第一个,因为应该只有一个。删除 id= 并使用 DOM 导航找到选择,单击按钮:$(this).closest(".header-name").find("select")
标签: javascript jquery