2017-01-04 2 views
1

Ich verwende jQuery Autocomplete in meinem Angular 2 rc4.So verwenden Sie jQuery Autocomplete, um einen bestimmten Datensatz zu durchsuchen, ohne die in das Eingabefeld eingegebenen Bestellworte zu verwenden

Meine Html ist <input class="search" id="search-input" type="text" name="search-input" placeholder="Search by keyword, lesson or standard" #searchResult1 [(ngModel)]="completeMe"/>

in .ts

heroes:any=[]; 
this.heroes.push(
{ 
    "id": "1", 
    "label": "This is example text" 
}); 
this.heroes.push(
{ 
    "id": "2", 
    "label": "This is result text" 
}); 
jQuery('#search-input') 
    .autocomplete({ 
    source:this.heroes, 
    minLength: 2, 
}); 

Ergebnis :: Datei Als ich eintrat bin in i/p-Box 'das ist', dann beide Ergebnis in li-Tag anhängen wird. und wenn ich 'dieses Ergebnis' eingib, wird nichts angezeigt oder an li Tag angehängt.

Erwartetes Ergebnis: Wenn ich 'this result' oder 'result this' eintrage, dann sollte 'this is result text' in li tag angefügt werden, wobei die Reihenfolge des eingegebenen Textes ignoriert wird.

Derzeit ist es nur die Wiedergabe der genauen Übereinstimmung aus dem Satz. aber ich wollte die Reihenfolge der Wörter ignorieren.

Bitte Hilfe.

+0

Sollte ziemlich einfach sein, indem Sie benutzerdefinierte Matcher für "Quelle" -Option als eine Funktion verwendet. Es wird eine Regex geben, die Wörter in beliebiger Reihenfolge abgleicht. – dfsq

+0

@dfsq können Sie mich bitte führen, wo ich die Dokumentation zum Erstellen von benutzerdefinierten Matcher erhalten kann. oder sag mir, wie man Regex der Quelle zuweist! – Vishu

+0

Hier ist es http://api.jqueryui.com/autocomplete/#option-source – dfsq

Antwort

1

So etwas sollte es tun:

jQuery('#search-input') 
    .autocomplete({ 
    source: (request, response) => { 
     const val = '^(?=.*\\b' + request.term.trim().split(/\s+/).join('\\b)(?=.*\\b') + ').*$' 
     const matcher = RegExp(val, 'i') 

     response(this.heroes.filter(item => matcher.test(item.label))); 
    }, 
    minLength: 2, 
    }); 

Beachten Sie auch, Sie nicht jQuery('#search-input') verwenden sollten, sollten elementRef.nativeElement der entsprechenden Komponente oder Abfrage DOM innerhalb dieser Komponente verwendet wird, aber nicht global wie Sie jetzt tun.

Verwandte Themen