2017-11-21 2 views
0

Ich habe einen Arbeitsblock von Javascript auf einem HTML-Eingang/Suchleiste. Dies funktioniert bis auf ein Problem einwandfrei:Ändern der Javascript-Suchfunktion

Im Moment wird nach genauen Übereinstimmungen gefiltert. Daher durchsucht es die divs auf der Seite. Wenn eine der div- und ihrer untergeordneten Tabellen eine Übereinstimmung aufweist, löscht sie alle anderen Zeilen aus der Tabelle und überlässt die Zeile nur einer Übereinstimmung. Aber momentan stimmt es mit der exakten Zeichenfolge überein.

Dies ist nur ein Problem, da viele unserer Elemente einen Bindestrich zwischen Zahlen haben. Wenn also jemand nach 4378-65 sucht, filtert er, was er braucht, aber wenn er 437865 eingibt, wird alles ausgeblendet, weil es technisch keine Übereinstimmung gefunden hat.

Hoffentlich eine einfache Lösung, aber jede Hilfe wird sehr geschätzt.

Die 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

Bitte verbringen einige Zeit erforscht, wie Textsuche zu behandeln. Es ist nicht so einfach. – zzzzBov

+0

Die einfachste Lösung, die ich mir vorstellen kann, wäre das Entfernen von Bindestrichen aus der Suchzeichenfolge und der div-Zeichenfolge. Es scheint, als ob dir das '-' egal ist. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/replace –

Antwort

1

die Bindestriche Vorausgesetzt sind unwichtig für Sie (die sie erscheinen die Informationen, die Sie zur Verfügung gestellt werden, da), im Wesentlichen alles, was Sie tun müssen, ist die Bindestriche im Vergleich zu entfernen, so es ignoriert im Wesentlichen ihre Anwesenheit:

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

Würde dies für Sie arbeiten?

+0

Kann ich im var-Filter immer noch auf 0 zählen? –

+0

Ja! Ich tendiere dazu, meine Variablen-Deklarationen zu trennen, aber das ist nur die Präferenz. –

+0

Also habe ich gerade wieder versucht, dies zu versuchen, und es hat tatsächlich dazu geführt, dass es jetzt nicht mit oder ohne Bindestrich gefiltert wurde. Also, wenn ich an den Punkt des Bindestrichs komme, verbirgt es sich einfach. –

1

Vielleicht wird dies helfen:

// 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

Ich denke, das macht Sinn, aber da ich mit Eingabewert und nicht eine explizite Zeichenfolge beschäftigen, wie würde ich dies auf meine JS anwenden? Tut mir leid, ich bin noch neu in JS –