多个搜索条件我有一个像下面搜索与多个搜索条件的李在列表</p> <p>
<ul>
<li>
<dl class="p_list1">
<dd id="name">
<b>Car</b></dd>
<dd id="company">
Honda, Hyundai, Toyota, Suzuki</dd>
</dl>
</li>
<li>
<dl class="p_list2">
<dd id="name">
<b>Bike</b></dd>
<dd id="company">
Honda, Yamaha, Suzuki</dd>
</dl>
</li>
<li>
<dl class="p_list3">
<dd id="name">
<b>Truck</b></dd>
<dd id="company">
Tata, Volvo, Mahindra</dd>
</dl>
</li>
</ul>
我使用两个文本框txtName的和txtCompany在此列表中搜索列表。 基于一个文本框的值或两个文本框的值我需要显示和隐藏列表。
- 如果用户在txtName中搜索如“c”那么它必须显示第1项和第3项。 (txtCompany为空)
- 如果用户在txtcompany中搜索“Hon”,它必须显示第一个和第二个列表。 (txtName的是空的)
- 如果txtName的像txtCompany“C”和用户搜索那么它从清单,项目第一和第三搜索
我用下面的jQuery
(
function ($) {
jQuery.expr[':'].Contains = function (a, i, m) {
return (a.textContent || a.innerText || "").toUpperCase().indexOf(m[3].toUpperCase()) >= 0;
};
function listFilter(list) {
$('#txtName').change(function() {
var filter = $(this).val(); if (filter) { $(list).find("dd[id='name']:not(:Contains(" + filter + "))").parent().parent().slideUp(); $(list).find("dd[id='name']:Contains(" + filter + ")").parent().parent().slideDown(); }
else
{ $(list).find("li").slideDown(); }
return false;
}
).keyup(function() { $(this).change(); });
$('#txtCompany').change(function() {
var filter = $(this).val(); if (filter) { $(list).find("dd[id='company']:not(:Contains(" + filter + "))").parent().parent().slideUp(); $(list).find("dd[id='company']:Contains(" + filter + ")").parent().parent().slideDown(); }
else
{ $(list).find("li").slideDown(); }
return false;
}
).keyup(function() { $(this).change(); });
}
$(function() {
listFilter($("#list"));
}
);
} (jQuery));
现在问题是当我开始用一个文本框搜索它的工作正常,当我使用两个搜索条件,然后它将开始搜索基于当前文本框按键。 我知道这是因为我写的变化事件文本框和它不考虑其他文本框的值:(
这里的a link to the test I have created
感谢您的帮助:) 我需要“和”搜索,即如果名称以“C”和公司如“H”,那么它必须显示第一个列表开始。 我正在研究解决这个问题的代码:) – pankaj
然后它很简单:以我的答案为出发点,您应该对slideUp和slideDown的条件进行反转。特别是,为slideUp上的两个条件写两条指令,这样如果一个匹配的元素被隐藏,并且只有一个用于slideDown,所以只有在两者都满足时才显示。 **请参阅我的答案中的代码** – mlr
感谢@mlr帮助解决了我的问题:) – pankaj