2017-11-21 17 views
0

私は、HTML入力/検索バーにJavascriptの作業ブロックを持っています。これは1つの問題を除いて完全に動作します:javascript検索機能を変更する

今、完全一致でフィルタリングします。したがって、ページのdivを検索し、divとその子テーブルのいずれかに一致するものがあれば、そのテーブルから他のすべての行を削除し、一致する行のみを残します。しかし、現在、それは正確な文字列に一致します。

これは多くのアイテムに数字の間にハイフンが付いているため、これは問題になるだけです。だから誰かが4378-65を検索すると必要なものがフィルタリングされますが、437865と入力すると技術的に一致するものが見つからなかったためすべてが隠されます。

うまくいけば簡単な修正ですが、どんな助けでも大歓迎です。

JS:ハイフンを推定

<script type = "text/javascript"> 
$(document).ready(function(){ 
$("#srch-term").keyup(function(){ 
//For entered search values 
// Retrieve the input field text and reset the count to zero 
var filter = $(this).val(), count = 0; 
var search_regex = new RegExp(filter, "i") 

// Loop through the main container as well as the table body and row that contains the match 
$(".group-container").each(function(){ 
    //check if filter matches the group name or description 
    var group_name = $(this).children('h3').text() 
    var group_description = $(this).children('.uk-text-muted').text() 

    if(group_name.search(search_regex)>=0 || group_description.search(search_regex)>=0){ // filter matches 
     $(this).show() // show group 
     $(this).find("tbody tr").show() // and all children 
     return // skip tr filtering 
    } 

    var no_matches = true 

    $(this).find("tbody tr").each(function(){ 

     // If the list item does not contain the text phrase fade it out 
     if ($(this).text().replace('Available','').search(search_regex) < 0) 
{ 
      $(this).hide(); 

     // Show the list item if the phrase matches and increase the count by 1 
     } else { 
      $(this).show(); 
      count++; 
      no_matches = false 
     } 
    }); 

    if(no_matches){ // if no tr matched the search either, hide whole group 
     $(this).hide(); 
    } 

    }); 
    }); 
}); 
</script> 
+0

をテキスト検索を処理する方法を研究し、いくつかの時間をお過ごしください。それほど簡単ではありません。 – zzzzBov

+0

私が考えることができる最も簡単な解決策は、検索文字列とdivの文字列の両方からハイフンを削除することです。 ''を気にしないようです。 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/replace –

答えて

1

ので、基本的にあなたがしなければならないすべては、比較の際にハイフンを削除している(彼らは、あなたが提供する情報を与えられることに表示される)あなたに重要ではありませんそれは本質的にそれらの存在を無視します:

var filter = $(this).val().replace("-", ""); 
// ... 
var group_name = $(this).children('h3').text().replace("-", ""); 

これはあなたのために働くでしょうか?

+0

varフィルタでカウントを0に保つことはできますか? –

+0

はい!私は変数宣言を分ける傾向がありますが...それはただの好みです。 –

+0

私はこれを試してみましたが、実際にはハイフンの有無にかかわらずフィルタリングされませんでした。ですから、ハイフンのポイントに達すると、それは関係なく非表示になります –

1

多分これは役立ちます:

// Raw string where you search 
 
var raw = 'word-1 43-286 234568 1-s23' 
 

 
// Improved string where hyphen is replaced only in numbers 
 
// Just run your search inside this improved string, not with raw 
 
var improved = raw.replace(/\b([\d]+)\-([\d]+)/g, '$1$2') 
 

 
// Returns word-1 43286 234568 1-s23 
 
console.log(improved) // so only hyphen in pure number was removed

+0

これは理にかなっていると思いますが、入力値と明示的な文字列ではないので、私はこれをJSにどのように適用しますか?申し訳ありませんが、私はまだJSに新しいです –