Jquery Listbox / Textbox filtern

Ich habe die folgende jquery-Funktion zum filtern der Inhalt einer listbox auf das onkeyup-Ereignis aus einer textbox.

function DoListBoxFilter(listBoxSelector, filter, keys, values) {
    var list = $(listBoxSelector);
    var selectBase = '<option value="{0}">{1}</option>';

    list.empty();
    for (i = 0; i < values.length; ++i) { //add elements from cache if they match filter

        var value = values[i];

        if (value == "" || value.toLowerCase().indexOf(filter.toLowerCase()) >= 0) {
            var temp = String.format(selectBase, keys[i], value);
            list.append(temp);
        }
    }
}

Es funktioniert sehr gut für kleine bis mittlere Listen, aber es ist ein bisschen langsam beim arbeiten mit Listen über 300-400 Elemente... Kann mir jemand helfen mit ein paar Ideen zur Optimierung des javascript ein wenig zu beschleunigen, ist die Funktion?

Die Funktion wird aufgerufen mit folgendem code:

    $('#<% = txtSearch.ClientID %>').keyup(function() {

        var filter = $(this).val();

        DoListBoxFilter('#<% = lstPars.ClientID %>', filter, keys_<% = this.ClientID %>, values_<% = this.ClientID %>);
    });

Diesen zu nutzen, ich Binde eine asp.net listbox und füllen Sie auch zwei javascript-arrays (Schlüssel und Wert) auf der Seite.

Dies IST die Speicherung der Daten an zwei Orten auf der Seite, aber mit dieser Methode bin ich in der Lage, verwenden Sie die postback der listbox um den ausgewählten Wert ohne mit javacript zu extrahieren, die den Wert und cache es in einer versteckten div. (es speichert auch, dass die Funktion beim laden der Seite auf dem browser-clients.. und das ist wirklich die Funktion wo bin ich zu sehen, die Langsamkeit, so dass die Speicherung an zwei stellen beschleunigt den Seitenaufbau)

Ich fand, dass ich brauchte, um das javascript-array-Ansatz, da die meisten Browser nicht erkennen alle versuche, sich zu verstecken eine option-tag... nur Firefox scheint es zu tun.

Ich bin mir nicht sicher, es ist möglich, zu optimieren und die Geschwindigkeit dieser code mehr, aber wenn jemand irgendwelche Ideen hat, würde ich mich freuen.

Dank,
Max Schilling

Schreibe einen Kommentar