У меня есть простой живой фильтр поиска, который работает следующим образом:Сделать JQuery: Содержит принимать несколько значений
jQuery.expr[':'].Contains = function(a,i,m) {
return jQuery(a).text().toUpperCase().indexOf(m[3].toUpperCase())>=0;
};
var $section = $('section');
var $noresults = $('#noresults');
$noresults.hide();
$('#search').bind('keyup focus', function() {
var input = $(this).val();
if(input) {
$section.hide();
var result = $("section:Contains('"+input+"')");
if(result.length) {
$noresults.hide();
result.show();
}
else {
$noresults.show();
}
}
else {
$noresults.hide();
$section.show();
}
});
Он работает нормально, но меня попросили сделать его принимать несколько значений. При этом текущем фильтре, если я нахожу «ABC», будут отображаться только разделы, содержащие строку «ABC». Но если я нахожу «ABC DEF», ничего не будет отображаться, хотя эти две строки содержатся в одном или нескольких разделах документа.
То, что я хотел бы получить это фильтр, который отображает только разделы, содержащие строки «ABC»и«DEF» когда я типа «ABC DEF» в поле ввода.
Я пробовал пару решений, которые включали разделение ввода, и придумали следующую версию, но она не работает. Не могли бы вы помочь мне сделать этот фильтр приемлемым для нескольких значений?
$('#search').bind('keyup focus', function() {
var input = $(this).val();
var arr = input.split(/[ ,]+/);
var len = arr.length;
console.log(arr);
console.log(len);
for(var i=0; i<len; ++i) {
if(input) {
$section.hide();
var result = $("section:Contains('"+arr[i]+"')");
if(result.length) {
$noresults.hide();
result.show();
}
else {
$noresults.show();
}
}
else {
$noresults.hide();
$section.show();
}
}
});
Большое спасибо за помощь.
Спасибо за вашу помощь, это звучит как вариант. Не могли бы вы поделиться фрагментом или чем-то, чтобы начать меня? – morgi
Отлично, это именно то, что мне нужно. Ты спасатель жизни! – morgi