Im IE 7 8 Browser wird ein Fehler gemeldet, wenn Sie das Attribut TRIM () zum Entfernen von Leerzeichen verwenden.
Daher gibt es die folgenden Lösungen für dieses Problem:
var aa = $ ("#id"). val (). trim () --- Die methode trim () kann nicht in IE analysiert werden
Lösung:
[var aa = $ .trim ($ ("#id"). val ()); ] Dies ist nicht einfach zu bedienen. Verwenden Sie also die unten eingeführte. Der erste wurde getestet.
Die W3C -Gruppe von Menschen wurde von Eseln in die Köpfe getreten, und sie unterstützten keine Trimmfunktionen (und Trimleft, Trimright), bis Java Skript 1.8.1. Leider unterstützt es jetzt nur Firefox3.5 jetzt. Da das Entfernen von Rohlücken auf beiden Seiten der Saiten zu häufig ist, haben alle großen Bibliotheken ihre eigenen Schatten. Darüber hinaus haben Ausländer viel Forschungsenergie und haben viele Erfolge erzielt.
Implementieren Sie 1 OK. (Schreiben Sie dies in JS und folgen Sie dann der Zeichenfolge, die Sie direkt entfernen möchten. TRIM ())
Die Codekopie lautet wie folgt:
String.prototype.trim = function () {
Gibt diesen .Replace zurück (/^/s/s*/, '') .replace (// s/s*$/, '');
}
Es sieht nicht sehr gut aus und ich habe zwei regelmäßige Ersetzungen verwendet. Die tatsächliche Geschwindigkeit ist erstaunlich, hauptsächlich aufgrund der internen Optimierung des Browsers. Ein berühmtes Beispiel für String -Spleißen, direkter Zusatz ist schneller als ein StringBuffer aus Array. Die Basis2 -Klassenbibliothek wendet diese Implementierung an.
Implementierung 2
Die Codekopie lautet wie folgt:
String.prototype.trim = function () {
Gibt diesen .Replace zurück (/^/s/, '') .Replace (// s $/, '');
}
Es ist sehr ähnlich wie Implementierung 1, aber ein wenig langsamer, der Hauptgrund ist, dass es zuerst davon ausgeht, dass es mindestens eine Weißespace gibt. Prototype.js verwendet diese Implementierung, aber sein Name ist Strip, da die Methoden des Prototyps versuchen, sie mit Ruby umzubenennen.
Implementierung 3
Die Codekopie lautet wie folgt:
String.prototype.trim = function () {
Geben Sie diese .Substring zurück (math.max (this .Search (// s/), 0), diese .Search (// s/s*$/) 1);
}
Der leere Teil wird durch Abfangen erhalten (natürlich sind Whitespace -Zeichen in der Mitte zulässig), und insgesamt 4 native Methoden werden aufgerufen. Die Voreinstellung ist sehr clever, Substring nimmt zwei Zahlen als Parameter. Math.max verwendet zwei Zahlen als Parameter und die Suche kehrt zu einer Nummer zurück. Die Geschwindigkeit ist etwas langsamer als die beiden oberen zwei, aber viel schneller als der Boden.
Implementieren 4
Die Codekopie lautet wie folgt:
String.prototype.trim = function () {
return this .Replace (/^/s |/s $/g, '');
}
Dies kann als vereinfachte Version von Implementierung 2 bezeichnet werden, bei der Kandidatenbetreiber zur Verbindung von zwei Regelmäßigkeiten verwendet werden. Dies wird jedoch nicht die Möglichkeiten der Browseroptimierung erreichen, was nicht so gut ist wie die Realisierung.
Implementieren 5
Die Codekopie lautet wie folgt:
String.prototype.trim = function () {
var str = this;
str = str.match (// s (?:/s/s)*/);
RETRT RIN? STR [0]: '';
}
Die Übereinstimmung soll in ein Array zurückkehren, und der Teil, der den Anforderungen der ursprünglichen Zeichenfolge entspricht, wird zu seinem Element. Um zu verhindern, dass der leere Speicherplatz in der Mitte der Saite getrennt wird, müssen wir die Gruppierung ohne Kapitän verwenden (?: Exp). Da das Array möglicherweise leer ist, müssen wir später weitere Urteile fällen. Es scheint, dass der Browser bei Verarbeitungsgruppen weniger leistungsfähig ist und ein Wort langsamer ist. Seien Sie also nicht abergläubisch über die Regeln, obwohl es im Grunde genommen allmächtig ist.
Implementierung 6
Die Codekopie lautet wie folgt:
String.prototype.trim = function () {
Gibt diesen .Replace zurück (/^/s*(/s*(/s/s)*)/s*$/, '$ 1');
}
Geben Sie den erforderlichen Teil an und legen Sie ihn in eine leere Schnur. Aber die Effizienz ist sehr schlecht, besonders in IE6.
Implementierung 7
Die Codekopie lautet wie folgt:
String.prototype.trim = function () {
Geben Sie diesen.
}
Es ist der Implementierung 6 sehr ähnlich, verwendet jedoch Nicht-Kreislaufpakete, um Vorteile zu erzielen, und die Leistungseffizienz wird leicht verbessert.
Implementierung 8
Die Codekopie lautet wie folgt:
String.prototype.trim = function () {
Geben Sie diesen.
}
Ich verbesserte die obigen zwei Ideen, verwendete die Gruppierung und die Charakter-Sets von nicht kaufmännern und ersetzt * durch?, Was erstaunlich war. Besonders in IE6 kann Wahnsinn verwendet werden, um diese Leistungsverbesserung zu beschreiben und Firefox in Sekunden lang direkt zu töten.
Implementieren 9
Die Codekopie lautet wie folgt:
String.prototype.trim = function () {
Gibt diesen .Replace zurück (/^/s*([/s/s]*?)/S*$/, '$ 1');
}
Dieses Mal habe ich faul Matching verwendet, um die nicht kaufmische Gruppierung zu ersetzen, was in Firefox verbessert wurde, und der IE war nicht so verrückt wie beim letzten Mal.
Realisieren 10
Die Codekopie lautet wie folgt:
String.prototype.trim = function () {
var str = this,,
whitespace = '/n/r/t/f/x0b/xa0/u2000/u2001/u2002/u2003/u2004/u2020 05/u2006/u2007/u2008/u2009/u200a/u200b/u2028/u2029/u3000' '';
für (var i = 0, len = str.length; i = 0; i--) {
if (whitespace.indexof (str.charat (i)) === -1) {
str = str.substring (0, i 1);
brechen;
}
}
whitespace.indexof (str.charat (0)) === -1? str: '';
}
Ich möchte nur sagen, dass die Person, die dies geschaffen hat, nicht mehr als Kuh beschrieben wird, sondern auf der gleichen Ebene wie ein Gott ist. Es listet zunächst alle möglichen leeren Zeichen auf, schneidet die vordere Leere im ersten Durchgang ab und schneidet das hintere Leerzeichen zum zweiten Mal ab. Der gesamte Prozess verwendet nur Indexof und Substring, eine native Methode, die speziell für die Verarbeitung von Zeichenfolgen entwickelt wurde, und wendet die Regelmäßigkeit nicht an. Die Geschwindigkeit ist erstaunlich schnell, und es wird erwartet, dass es der internen binären Implementierung nahe steht, und sie hat eine hervorragende Leistung in IE und Firefox (natürlich sind andere Browser zweifellos). Geschwindigkeiten sind zusätzlich null Millisekunden.
Implementieren 11
Die Codekopie lautet wie folgt:
String.prototype.trim = function () {
var str = this,,
str = str.replace (/^/s/, '');
für (var i = str.length-1; i> = 0; i--) {
if (//s/.test(str.charat(i))) {
str = str.substring (0, i 1);
brechen;
}
}
return str;
}
Implementierung 10 hat uns mitgeteilt, dass die ursprünglich unbekannte normale String -Interception -Methode weitaus besser ist als der normale Ersatz, obwohl sie etwas komplizierter ist. Solange die Regelmäßigkeit nicht zu kompliziert ist, können wir den Browser verwenden, um die Regelmäßigkeit zu optimieren, um die Effizienz der Programmausführung zu verbessern und 8 Leistung in IE zu erzielen. Ich glaube nicht, dass irgendjemand die Implementierung 10 in einem Projekt normalerweise anwenden würde, da diese Whitespace -Implementierung zu lang und schwer zu erinnern ist (natürlich wird es auf jeden Fall beginnen, eine Klassenbibliothek zu erstellen). Die Implementierung von 11 kann als verbesserte Version bezeichnet werden. Die Lücken vorne werden durch regelmäßigen Austausch abgeschnitten. Sie werden später mit einheimischen Methoden behandelt. Der Effekt ist der Originalversion nicht unterlegen, aber die Geschwindigkeit ist erstaunlich.
Implementieren 12
Die Codekopie lautet wie folgt:
String.prototype.trim = function () {
var str = this,,
str = str.replace (/^/s/s*/, ''),
ws = // s/,,
i = str.length;
während (Ws.test (Str.Charat (-i)));
return str.slice (0, i 1);
}
Die bessere Verbesserungsversion der Implementierung 10 und der Implementierung 11 ist geschrieben. Beachten Sie, dass es nicht um Leistungsgeschwindigkeit, sondern um einfache Speicher und Anwendung geht. Und seine beiden Vorgänger sind außerdem Null Millisekunden. Sie werden dies verwenden, um Menschen in Zukunft zu arbeiten und zu erschrecken.
Das Folgende ist das Vergleichsergebnis von Ausländern. Der Ausführungshintergrund besteht darin, Trimmvorgänge in diesem Artikel (mehr als 27.600 Zeichen) auszuführen.
Implementieren Sie Firefox 2 dh 6
trim1 15ms trim2 31Ms trim3 46ms 31ms
trim4 47ms 46 ms
trim5 156ms 1656ms
Trim6 172 ms 2406 ms
Trim7 172ms 1640 ms
trim8 281ms trim9 125ms 78ms
TRIM10 TRIM11 TRIM12 TRIM -Funktion Implementierung zeigt Ihre eigenen Ideen an. Wenn Sie verstehen möchten, was der ursprüngliche Autor gesagt hat, lesen Sie bitte den Originaltext.
Derzeit gibt es 12 Methoden zum Entfernen von Räumen in JS:
Implementierung 1
String.prototype.trim = function () {return this.replace (/^/s/s*/, '') .replace (// s/s*$/, ''); }
Implementierung 2
String.prototype.trim = function () {return this.replace (/^/s+/, '') .Replace (// s+$/, ''); }
Implementierung 3
String.prototype.trim = function () {return this.s String (math.max (this.search (// s/), 0), this.search (// s/s*$/) + 1); }
Implementieren 4
String.Prototype.trim = function () {return this.replace (/^/s+|/s+$/g, ''); }
String.Prototype.trim = function () {var str = this; str = str.match (// s+(?:/s+/s+)*/); RETRT RIN? STR [0]: ''; }
String.prototype.trim = function () {return this.replace (/^/s*(/s*(/s+/s+)*)/s*$/, '$ 1'); }
Implementierung 7
String.prototype.trim = function () {return this.replace (/^/s*(/s*(?:/S+/s+)*)/s*$/, '$ 1'); }
String.prototype.trim = function () {return this.replace (/^/s*((?: [/S]*/s)?)/S*$/, '$ 1'); }
String.prototype.trim = function () {return this.replace (/^/s*([/s/s]*?)/S*$/, '$ 1'); }
String.Prototype.trim = function () {var str = this, whitespace = ' /n/r/t/f/x0b/xa0/?/?/?/?/?/?/?/?/?/?/?/?/?/?/?/?/?/?/?/?/?/?/?/?/?/?/?/?/?/?/?/?/?/?/?/?/?/?/?/?/?/?/?/?/?/?/?/?/?/ '; für (var i = 0, len = str.length; i <len; i ++) {if (whitespace.indexof (str.charat (i)) === -1) {str = str.s String (i); brechen; }} für (i = str.length -1; i> = 0; i--) {if (whitespace.indexof (str.charat (i)) === -1) {str = str.s String (0, i + 1); brechen; }} return whitespace.indexof (str.charat (0)) === -1? str: ''; }
Implementieren 11
String.Prototype.trim = function () {var str = this, str = str.replace (/^/s+/, ''); für (var i = str.length-1; i> = 0; i--) {if (//s/.test(str.charat(i))) {str = str.s String (0, i + 1); brechen; }} return str; }
Implementieren 12
String.prototype.trim = function () {var str = this, str = str.replace (/^/s/s*/, ''), ws = // s/, i = str.length; während (Ws.test (Str.Charat (-i))); return str.slice (0, i + 1); }
Es sieht nicht sehr gut aus, und ich habe zwei regelmäßige Ersetzungen verwendet, und die tatsächliche Geschwindigkeit ist erstaunlich, hauptsächlich aufgrund der internen Optimierung des Browsers. Ein berühmtes Beispiel für String -Spleißen, das schneller als Stringb? R aus Array ist. Die Base2 -Klassenbibliothek verwendet diese Implementierung.
Es ist sehr ähnlich wie bei Implementierung 1, aber etwas langsamer, vor allem, weil es zum ersten Mal davon ausgeht, dass es mindestens eine Weißespace gibt. Prototype.js verwendet diese Implementierung, aber sein Name ist Strip, da die Prototyp -Methode denselben Namen wie r y hat.
Der leere Teil wird durch Abfangen erhalten (natürlich ist das Whitespace -Charakter in der Mitte zulässig) und insgesamt vier native Methoden werden aufgerufen. Es ist sehr geschickt gestaltet und s String nimmt zwei Zahlen als Parameter. Math.max nimmt zwei Zahlen als Parameter auf und die Suche gibt eine Nummer zurück. Die Geschwindigkeit ist etwas langsamer als die beiden oben, aber schneller als die meisten unten.
Dies kann als vereinfachte Version von Implementierung 2 bezeichnet werden, bei der Kandidatenbetreiber zum Verbinden von zwei Regeln verwendet werden. Aber dies wird die Gelegenheit verlieren, den Browser zu optimieren, der nicht so gut ist wie die Verwirklichung. 3. Weil es elegant erscheint, verwenden viele Klassenbibliotheken ihn, wie z. B. JQ Ry und Mootools
Implementieren 5
Match gibt ein Array zurück, so dass der Teil der ursprünglichen Zeichenfolge, der den Anforderungen entspricht, zu seinem Element wird. Um zu verhindern, dass die Weißespace in der Mitte der Saite ausgeschlossen wird, müssen wir eine nicht kaufmische Gruppierung verwenden (?: Exp). Da das Array möglicherweise leer ist, müssen wir später weitere Urteile fällen. Es scheint, dass der Browser in Verarbeitungsgruppen schwach ist und ein Wort langsam ist. Seien Sie also nicht abergläubisch über die Regeln, obwohl es im Grunde genommen allmächtig ist.
Implementierung 6
Geben Sie den erforderlichen Teil an und legen Sie ihn in eine leere Schnur. Aber die Effizienz ist sehr schlecht, besonders in IE6.
Es ist der Implementierung 6 sehr ähnlich, verwendet jedoch Nicht-Kreislaufpakete, um Vorteile zu erzielen, und die Leistungseffizienz wird leicht verbessert.
Implementierung 8
Ich verbesserte die obigen zwei Ideen, verwendete nicht kaufende Gruppierung und Charakter-Sets und ersetzt * durch?, Was sehr erstaunlich war. Besonders in IE6 kann Wahnsinn verwendet werden, um diese Leistungsverbesserung zu beschreiben und Firefox in Sekunden lang direkt zu töten.
Implementieren 9
Dieses Mal habe ich faul Matching verwendet, um die nicht kaufmische Gruppierung zu ersetzen, was in Firefox verbessert wurde, und der IE war nicht so verrückt wie beim letzten Mal.
Realisieren 10
Ich möchte nur sagen, dass die Person, die dies geschaffen hat, nicht mehr als Kuh beschrieben wird, sondern auf der gleichen Ebene wie ein Gott ist. Es listet zunächst alle möglichen Rohlinge auf, schneidet die vorderen Rohlinge im ersten Durchgang ab und schneidet zum zweiten Mal die hinteren Rohlinge ab. Der gesamte Prozess verwendet nur Indexof und S String, eine native Methode, die speziell für die Verarbeitung von Zeichenfolgen entwickelt wurde, und verwendet keine Regelmäßigkeit. Die Geschwindigkeit ist erstaunlich schnell, wahrscheinlich in der Nähe der internen binären Implementierung, und sie hat eine gute Leistung in IE und Firefox (natürlich sind andere Browser zweifellos). Die Geschwindigkeit liegt bei Null -Millisekunden.
Implementierung 10 hat uns mitgeteilt, dass die normale Interception -Methode für native String -String weitaus besser ist als der normale Ersatz, obwohl sie etwas komplizierter ist. Solange die Regelmäßigkeit nicht zu kompliziert ist, können wir den Browser verwenden, um die Regelmäßigkeit zu optimieren, um die Effizienz der Programmausführung zu verbessern, z. B. 8 Leistung in IE. Ich glaube nicht, dass irgendjemand die Implementierung 10 in einem Projekt normalerweise anwenden würde, da diese Whitespace -Implementierung zu lang und schwer zu erinnern ist (natürlich, wenn Sie eine Klassenbibliothek erstellen, ist es definitiv das erste). Die Implementierung von 11 kann als verbesserte Version bezeichnet werden. Die Lücken im ersten Teil werden durch regelmäßigen Austausch abgeschnitten, und die spätere Verarbeitung erfolgt mit nativen Methoden. Der Effekt ist der Originalversion nicht unterlegen, aber die Geschwindigkeit ist sehr erstaunlich.
In der besseren Verbesserungsversion der Schreibmethode der Implementierung 10 und der Implementierung 11 geht es nicht um Leistungsgeschwindigkeit, sondern um einfaches Speicher und Gebrauch. Und seine beiden Vorgänger befinden sich auf Null Millisekundenstufe, daher werde ich dies verwenden, um in Zukunft zu arbeiten und zu erschrecken.