次のように実行される単純なライブ検索フィルターがあります。
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」と入力すると、これら2つの文字列がドキュメントの1つまたは複数のセクションに含まれていても、何も表示されません。
取得したいのは、入力フィールドに「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();
}
}
});
どうもありがとうございました。