2016-11-10 25 views
1

Ich habe eine Suchleiste, um die Zeilen mit einer Zelle anzuzeigen, die einen bestimmten Wert enthält, aber ich möchte nur diejenigen, die mit diesem Wert beginnen, nur wenn sie damit beginnen, nicht wenn sie es enthalten in der Mitte der Schnur. DieseFiltern nach Zeichenfolge Startwert

ist, was ich habe:

var $rows = $('#tableID tbody tr'); 

$('#search').keyup(function() { 
    var val = $.trim($(this).val()).replace(/ +/g, ' ').toLowerCase(); 

    $rows.show().filter(function() { 
     var text = $('.filterClass', this).text().replace(/\s+/g, ' ').toLowerCase(); 
     return !~text.indexOf(val); 
    }).hide(); 
}); 
+0

@jcuenod gemacht! Ich konnte es vorher nicht tun, Entschuldigung. –

Antwort

1

Was Ihr Code tut: Sie indexOf verwenden für die Anwesenheit von val zu testen (die ~ operator ist -1 zu 0 Konvertierendes "falsy" ist und so !~text.indexOf(val) grundsätzlich testet, ob val ist überall in text).

Lösung: nur überprüfen, ob indexOf0 ist (mit anderen Worten, die val ist beginnt bei Index 0 in text):

var $rows = $('#tableID tbody tr'); 

$('#search').keyup(function() { 
    var val = $.trim($(this).val()).replace(/ +/g, ' ').toLowerCase(); 

    $rows.show().filter(function() { 
     var text = $('.filterClass', this).text().replace(/\s+/g, ' ').toLowerCase(); 
     return text.indexOf(val) !== 0;  // <-- Note this line 
    }).hide(); 
}); 

Side Hinweis: Es ist einfacher Code, das Mittel zu verstehen, "zeigen nur die Zeilen so" als zu verstehen "verstecken Sie alle Zeilen, die nicht so sind". Ich würde vorschlagen, den Code der Struktur wie folgt zu ändern:

$rows.hide() 
$rows.filter(/* your filter code */).show() 

(dies bedeuten würde, als auch das Ausrufezeichen aus der return-Anweisung entfernen)

+0

Das hat mein Problem gelöst! Danke für die Erklärung :) –

1

einfach überprüfen, ob das Ergebnis der indexOf() gleich 0 ist. Verwenden Sie statt !~text.indexOf(val) .