Co to jest czysta i wydajna implementacja JavaScriptu, aby usunąć spacje z początkowych i końcowych spacji?Pasek napisów() dla JavaScript?
Na przykład:
" dog"
"dog "
" dog "
" dog "
wszystko się zamienił
"dog"
Co to jest czysta i wydajna implementacja JavaScriptu, aby usunąć spacje z początkowych i końcowych spacji?Pasek napisów() dla JavaScript?
Na przykład:
" dog"
"dog "
" dog "
" dog "
wszystko się zamienił
"dog"
Użyj tego:
if(typeof(String.prototype.trim) === "undefined")
{
String.prototype.trim = function()
{
return String(this).replace(/^\s+|\s+$/g, '');
};
}
funkcji przycinania będzie teraz dostępny jako funkcja pierwszej klasy na swoich strun. Np
" dog".trim() === "dog" //true
EDIT: zrobić sugestię J-P, w celu połączenia się w jedną wyrażeń regularnych wzorów. Dodano również modyfikator globalny na sugestię Christopha.
Wyobraź sobie, że Matthew Crumley powąchał funkcję przycinania przed odtworzeniem jej. Odbywa się to w przypadku, gdy wersja JavaScript używana na kliencie jest nowsza i dlatego ma własną, natywną funkcję przycinania.
http://blog.stevenlevithan.com/archives/faster-trim-javascript dla niektórych danych wydajnościowych – Christoph
, aby były zgodne ze specyfikacją ECMA, 'trim()' musi rzutować 'this' na ciąg znaków, np. Muszę zmienić 'this.replace (...)' na 'String (this) .replace (...)' lub '('' + this) .replace (...)'; to pozwala 'call()' lub 'apply()' funkcję na wartości inne niż ciąg znaków – Christoph
@Christoph: czy chcesz powiedzieć w definicji funkcji String.prototype.trim() = ...? Spodziewałbym się, że "to" odnosi się już do ciągu znaków, ponieważ jest to prototypowa funkcja rozszerzająca typ String. –
Oto funkcja, której używam.
function trim(s){
return (s || '').replace(/^\s+|\s+$/g, '');
}
Steven Levithan napisał kiedyś o tym, jak wdrożyć Faster JavaScript Trim. To zdecydowanie warte obejrzenia.
Jeśli zamiast pisać nowy kod do przycinania napisu, patrzysz na istniejący kod, który wywołuje "strip()" i zastanawiasz się, dlaczego to nie działa, możesz chcieć sprawdzić, czy próbuje on dołączyć coś podobnie jak framework prototypejs i upewnij się, że faktycznie się ładuje.
Ta struktura dodaje funkcję strip do wszystkich obiektów String, ale jeśli np. uaktualniłeś go, a twoje strony wciąż odwołują się do starego pliku .js, ale oczywiście nie zadziała.
właśnie dlatego przyjechałem tutaj! – momeara
dla jQuery użytkowników, jak o $.trim(s)
Gumbo już zauważyć to w komentarzu, ale to ponosi powtarzając jako odpowiedź: Metoda trim()
dodano w JavaScript 1.8.1 i jest obsługiwany przez wszystkie nowoczesne przeglądarki (Firefox 3.5+, IE 9, Chrome 10, Safari 5.x), chociaż IE 8 i starsze nie obsługują tego.Sposób użycia jest prosty:
" foo\n\t ".trim() => "foo"
Patrz także:
Jeśli już przy użyciu jQuery, to może warto przyjrzeć się jQuery.trim()
który jest już dostarczony z jQuery.
Lepszym polyfill z MDN który obsługuje usuwanie BOM i NBSP:
if (!String.prototype.trim) {
String.prototype.trim = function() {
return this.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, '');
};
}
Należy pamiętać, że modyfikacja wbudowanych prototypów pochodzi z przeboju wydajności (ze względu na ratowanie silnika JS na liczby optymalizacje środowiska wykonawczego), aw sytuacjach krytycznych z punktu widzenia wydajności może zaistnieć potrzeba rozważenia alternatywy dla definiowania myTrimFunction(string)
. Mimo to, jeśli kierujesz reklamy na starsze środowisko bez pomocy natywnej .trim()
, prawdopodobnie masz do czynienia z ważniejszymi problemami z wydajnością.
Ta funkcja jest określana jako "przycinanie". Zobacz https://developer.mozilla.org/En/Core_JavaScript_1.5_Reference/Global_Objects/String/Trim – Gumbo
@Gumbo: przycinanie jest nieco nowsze i może nie być obsługiwane w różnych przeglądarkach. Nie wiem, ale nigdy nie możesz powiedzieć, korzystając z obsługi wielu przeglądarek. –