2012-12-03 17 views
16

Jak to opisano w wielu pytaniach na stosie - IE 8 nie akceptuje .trim(), ale struktura jQuery to zajmuje.Jak korzystać z funkcji trim (jQuery)

Nie wiem, jak przetłumaczyć moją funkcję, aby korzystać z tej wersji wykończenia (myślałem, że już używam jQuery), czy ktoś mógłby doradzić? Oto mój kod:

$('input').val(function(index, val){ 
    return val.replace('Please Select', '').trim(); 
}); 

Został zaprojektowany w celu zastąpienia ciągu nicością.

Próbowałem:

$('input').val(function(index, val){ 
    return val.replace('Please Select', '')$.trim(); 
}); 

ale to nie było dobre.

Odpowiedz

4

Spróbuj tego:

$.trim(val.replace('Please Select', '')); 

Oto zapis w dokumentacji Trim().

7

IE8 nie posiada natywną trim sposób, na ogół po prostu poszerzyć prototyp:

if (!String.prototype.trim) 
{ 
    String.prototype.trim = function() 
    { 
     return this.replace(/^\s+|\s+$/g,''); 
    }; 
} 

Jest to najkrótsza regex przyciąć ciąg, ale słyszałem, że jest powiedzieć, że .replace(/^\s\s*/,'').replace(/\s*\s$/,'') (marginalnie) szybciej ... wybór jest Twój

Jeśli naprawdę chcesz użyć jQuery do tego, oczywiście będziesz musiał uczynić ciąg docelowy kontekstem wywołanej metody ($.trim nazywa tę metodę na $ == = obiekt jQuery), więc uczyń String obiektem jQ:

$(' foo bar ').trim();//returns "foo bar" 
//compared to augmented prototype: 
' foo bar '.trim();//returns "foo bar" 

Korzyść z rozszerzonego prototypu jest to, że nie trzeba dodatkowego narzutu tworzenia nowego obiektu jQuery, podczas gdy przy użyciu prototypu-podejście opiera się na JS zawinąć ciąg w natywnej obiektu String i zastosowanie metoda do tego. Zasadniczo, jest to ta sama operacja, ale to powinny być nieznacznie bardziej wydajny, ponieważ jQuery robi kilka sprawdzeń dowolny ciąg przekazany do konstruktora jQuery ($())