В браузере IE 7 8, если вы используете атрибут Trim () для удаления пространств, сообщается об ошибке.
Следовательно, есть следующие решения этой проблемы:
var aa = $ ("#id"). val (). trim () --- метод trim () не может быть проанализирован в IE
Решение:
[var aa = $ .trim ($ ("#id"). val ()); ] Это не просто в использовании, поэтому используйте представленную ниже. Первый был проверен.
Группа людей W3C была выбита в головы ослами, и они не поддерживали функции отделки (и Trimleft, Trimright) до Java Script 1.8.1. К сожалению, только Firefox3.5 поддерживает его сейчас. Поскольку удаление пробелов по обе стороны струн слишком распространено, все основные библиотеки имеют свои собственные тени. Кроме того, у иностранцев много исследований и добились больших успехов.
Реализуйте 1 ОК. (Напишите это в JS, а затем следуйте по строке, которую вы хотите удалить пространство напрямую. Trim ())
Кода -копия выглядит следующим образом:
String.prototype.trim = function () {
вернуть это .Replace (/^/s/s*/, '') .Replace (// s/s*$/, '');
}
Это не очень хорошо, и я использовал два обычных замены. Фактическая скорость удивительна, в основном из -за внутренней оптимизации браузера. Знаменитый пример сплайсинга струн, прямое добавление быстрее, чем stringbuffer, изготовленный из массива. Библиотека классов Base2 применяет эту реализацию.
Реализация 2
Кода -копия выглядит следующим образом:
String.prototype.trim = function () {
вернуть это .Replace (/^/s/, '') .replace (// s $/, '');
}
Это очень похоже на реализацию 1, но немного медленнее, главная причина в том, что сначала предполагает, что есть хотя бы одно пробел. Prototype.js использует эту реализацию, но его название - полоса, потому что методы прототипа пытаются переименовать ее с помощью Ruby.
Реализация 3
Кода -копия выглядит следующим образом:
String.prototype.trim = function () {
вернуть это .substring (math.max (this .search (// s/), 0), это .search (// s/s*$/) 1);
}
Пустая часть получается путем перехвата (конечно, в середине допускаются персонажи пробелов), и в общей сложности называются 4 нативных метода. Предуставление очень умное, подстроение принимает два числа в качестве параметров. Math.max использует два числа в качестве параметров, а поиск возвращается к одному номеру. Скорость немного медленнее, чем верхние два, но она намного быстрее, чем дно.
Реализация 4
Кода -копия выглядит следующим образом:
String.prototype.trim = function () {
return this .replace (/^/s |/s $/g, '');
}
Это можно назвать упрощенной версией реализации 2, которая заключается в использовании операторов -кандидатов для подключения двух закономерности. Но это не сможет достичь возможностей оптимизации браузера, что не так хорошо, как реализация 3. Поскольку это кажется элегантным, многие библиотечные приложения, такие как jQuery и Mootoos
Реализация 5
Кода -копия выглядит следующим образом:
String.prototype.trim = function () {
var str = это;
str = str.match (// s (?:/s/s)*/);
вернуть Стр? str [0]: '';
}
Матч должен вернуться к массиву, а часть, соответствующая требованиям исходной строки, становится его элементом. Чтобы предотвратить отключение чистого пространства в середине строки, нам нужно использовать группировку без захвата (?: Exp). Поскольку массив может быть пустым, нам нужно вынести дополнительные суждения позже. Кажется, что браузер менее мощный в обработке групп, а одно слово медленнее. Так что не будь суеверным в отношении правил, хотя это в основном всемогущ.
Реализация 6
Кода -копия выглядит следующим образом:
String.prototype.trim = function () {
вернуть это .Replace (/^/s*(/s*(/s/s)*)/s*$/, '$ 1');
}
Предоставьте необходимую часть и положите ее в пустую строку. Но эффективность очень плохая, особенно в IE6.
Реализация 7
Кода -копия выглядит следующим образом:
String.prototype.trim = function () {
вернуть это .Replace (/^/s*(/s*(?:/s/s)*)/s*$/, '$ 1');
}
Он очень похож на реализацию 6, но использует пакеты без захвата для обеспечения преимуществ, а эффективность производительности немного улучшена.
Реализация 8
Кода -копия выглядит следующим образом:
String.prototype.trim = function () {
вернуть это .replace (/^/s*((?: [/s/s]*/s)?)/s*$/, '$ 1');
}
Я улучшил две вышеупомянутые идеи, использовали не капитальную группировку и наборы символов и заменили *, что было удивительно. Особенно в IE6 безумие может быть использовано для описания этого улучшения производительности и непосредственно убить Firefox за считанные секунды.
Реализация 9
Кода -копия выглядит следующим образом:
String.prototype.trim = function () {
вернуть это .Replace (/^/s*([/s/s]*?)/s*$/, '$ 1');
}
На этот раз я использовал Lazy Matching, чтобы заменить не капитальную группировку, которая была улучшена в Firefox, и IE не был таким сумасшедшим, как в прошлый раз.
Осознавать 10
Кода -копия выглядит следующим образом:
String.prototype.trim = function () {
var str = это,
Whitespace = '/n/r/t/f/x0b/xa0/u2000/u2001/u2002/u2003/u2004/u2020 05/u2006/u2007/u2008/u2009/u200a/u200b/u2028/u2029/u3000';
for (var i = 0, len = str.length; i = 0; i--) {
if (witespace.indexof (str.charat (i)) === -1) {
str = str.substring (0, i 1);
перерыв;
}
}
return whilepace.indexof (str.charat (0)) === -1? Str: '';
}
Я просто хочу сказать, что человек, который создал это, больше не описывается как корова, а на том же уровне, что и Бог. Сначала он перечисляет все возможные пустые символы, отрезает переднюю пусть в первом обходе и во второй раз отрезает заднюю пусть. Весь процесс использует только индекс и подстроение, собственный метод, специально разработанный для обработки строк, и не применяет регулярность. Скорость удивительно быстрая, и ожидается, что она будет близка к внутренней бинарной реализации, и она обладает выдающейся производительностью в IE и Firefox (конечно, другие браузеры, несомненно,). Скорости - все это нулевые миллисекунд.
Реализация 11
Кода -копия выглядит следующим образом:
String.prototype.trim = function () {
var str = это,
str = str.replace (/^/s/, '');
for (var i = str.length-1; i> = 0; i--) {
if (//s/.test(str.charat(i))) {
str = str.substring (0, i 1);
перерыв;
}
}
вернуть Str;
}
Реализация 10 сказала нам, что нормальный метод перехвата строк, который изначально неизвестен, намного лучше, чем обычная замена, хотя он немного сложнее. Но до тех пор, пока регулярность не слишком сложна, мы можем использовать браузер для оптимизации регулярности для повышения эффективности выполнения программы и достижения 8 производительности в IE. Я не думаю, что кто -то обычно применяет реализацию 10 в проекте, потому что эта реализация пробела слишком длинна и трудно помнить (конечно, если вы создаете библиотеку классов, она обязательно начнется). Реализация 11 можно сказать, что является его улучшенной версией. Заготовки спереди отрезаны регулярной заменой. Позже они обрабатываются местными методами. Эффект не уступает оригинальной версии, но скорость потрясающая.
Реализация 12
Кода -копия выглядит следующим образом:
String.prototype.trim = function () {
var str = это,
str = str.replace (/^/s/s*/, ''),
ws = // s/,
i = str.length;
while (ws.test (str.charat (-i)));
вернуть str.slice (0, i 1);
}
Записана версия реализации 10 и реализации 11 и реализации 11. Обратите внимание, что речь идет не о скорости производительности, а о простоте памяти и применения. И два его предшественника - это нулевые миллисекунды. Кроме того, они будут использовать это, чтобы работать и напугать людей в будущем.
Ниже приведен результат сравнения, данный иностранцами. Фон выполнения состоит в том, чтобы выполнить операции TRIM в этой статье (более 27 600 символов).
Реализуйте Firefox 2 т.е. 6
TRIM1 15 мс TRIM2 31 мс TRIM3 46 мс 31 мс
Trim4 47 мс 46 мс
Trim5 156 мс 1656 мс
TRIM6 172 мс 2406 мс
Trim7 172 мс 1640 мс
TRIM8 281 мс TRIM9 125 мс 78 мс
TRIM10 TRIM11 TRIM12 TRIMPERNATION Реализация ваших собственных идей. Если вы хотите понять, что сказал оригинальный автор, прочитайте оригинальный текст.
В настоящее время есть 12 методов удаления пространств в JS:
Реализация 1
String.prototype.trim = function () {return this.replace (/^/s/s*/, '') .replace (// s/s*$/, ''); }
Реализация 2
String.prototype.trim = function () {return this.replace (/^/s+/, '') .replace (// s+$/, ''); }
Реализация 3
String.prototype.trim = function () {return this.s string (math.max (this.search (// s/), 0), this.search (// s/s*$/) + 1); }
Реализация 4
String.prototype.trim = function () {return this.replace (/^/s+|/s+$/g, ''); }
String.prototype.trim = function () {var str = this; str = str.match (// s+(?:/s+/s+)*/); вернуть Стр? str [0]: ''; }
String.prototype.trim = function () {return this.replace (/^/s*(/s*(/s+/s+)*)/s*$/, '$ 1'); }
Реализация 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)?)/S*$/, '$ 1'); }
String.prototype.trim = function () {return this.replace (/^/s*([/s/s]*?)/S*$/, '$ 1'); }
String.prototype.trim = function () {var str = this, witeSpace = ' /n/r/t/f/x0b/xa0/?/?/?/?/?/?/?/?/?/?/?/?/?/?/?/?/?/?/?/?/?/?/?/?/?/?/?/?/?/?/?/?/?/?/?/?/?/?/?/?/?/?/?/?/?/?/?/?/?/? for (var i = 0, len = str.length; i <len; i ++) {if (whites.indexof (str.charat (i)) === -1) {str = str.s string (i); перерыв; }} for (i = str.length -1; i> = 0; i--) {if (witeSpace.indexof (str.charat (i)) === -1) {str = str.s string (0, i + 1); перерыв; }} return witespace.indexof (str.charat (0)) === -1? Str: ''; }
Реализация 11
String.prototype.trim = function () {var str = this, str = str.replace (/^/s+/, ''); for (var i = str.length-1; i> = 0; i--) {if (//s/.test(str.charat(i))) {str = str.s string (0, i + 1); перерыв; }} return str; }
Реализация 12
String.prototype.trim = function () {var str = this, str = str.replace (/^/s/s*/, ''), ws = // s/, i = str.length; while (ws.test (str.charat (-i))); вернуть str.slice (0, i + 1); }
Это не выглядит очень хорошо, и я использовал два обычных замены, и фактическая скорость удивительна, главным образом из -за внутренней оптимизации браузера. Известный пример сплайсинга струн, который быстрее, чем Stringb? R, изготовленный из массива. Библиотека классов Base2 использует эту реализацию.
Это очень похоже на реализацию 1, но немного медленнее, в основном потому, что сначала предполагает, что есть хотя бы одно пробел. Prototype.js использует эту реализацию, но его имя - полоса, потому что метод прототипа стремится иметь то же имя, что и R Y.
Пустая часть получается путем перехвата (конечно, персонаж пробела допускается в середине), и в общей сложности называются четыре собственных метода. Он разработан очень умно, и S String принимает два числа в качестве параметров. Math.max принимает два числа в виде параметров, а поиск возвращает число. Скорость немного медленнее, чем два выше, но быстрее, чем большинство ниже.
Это можно назвать упрощенной версией реализации 2, которая заключается в использовании операторов -кандидатов для подключения двух правил. Но это потеряет возможность оптимизировать браузер, который не так хорош, как реализация 3. Поскольку это кажется элегантным, многие классовые библиотеки используют его, такие как JQ Ry и Mootoos
Реализация 5
Матч возвращает массив, поэтому часть исходной строки, соответствующей требованиям, становится его элементом. Чтобы предотвратить исключение пробела в середине строки, нам необходимо использовать группировку без капиталов (?: Exp). Поскольку массив может быть пустым, нам нужно вынести дополнительные суждения позже. Кажется, что браузер слаб в обработке групп, а одно слово медленно. Так что не будь суеверным в отношении правил, хотя это в основном всемогущ.
Реализация 6
Предоставьте необходимую часть и положите ее в пустую строку. Но эффективность очень плохая, особенно в IE6.
Он очень похож на реализацию 6, но использует пакеты без захвата для обеспечения преимуществ, а эффективность производительности немного улучшена.
Реализация 8
Я улучшил две вышеупомянутые идеи, использовали не капитальную группировку и наборы символов и заменили *, что было очень удивительно. Особенно в IE6 безумие может быть использовано для описания этого улучшения производительности и непосредственно убить Firefox за считанные секунды.
Реализация 9
На этот раз я использовал Lazy Matching, чтобы заменить не капитальную группировку, которая была улучшена в Firefox, и IE не был таким сумасшедшим, как в прошлый раз.
Осознавать 10
Я просто хочу сказать, что человек, который создал это, больше не описывается как корова, а на том же уровне, что и Бог. Сначала он перечисляет все возможные пробелы, отрезает передние пробелы в первом обходе и во второй раз отрезает задними пробелами. Весь процесс использует только IndexOF и S String, собственный метод, специально разработанный для обработки строк, и не использует регулярность. Скорость удивительно быстрая, вероятно, близка к внутренней бинарной реализации, и она обладает хорошей производительностью в IE и Firefox (конечно, другие браузеры, несомненно,). Скорость - все на уровне нуля миллисекунды.
Реализация 10 сказала нам, что нормальный метод перехвата нативного строки намного лучше, чем обычная замена, хотя он немного сложнее. Но до тех пор, пока регулярность не слишком сложна, мы можем использовать браузер для оптимизации регулярности для повышения эффективности выполнения программы, такой как достижение 8 производительности в IE. Я не думаю, что кто -то обычно применяет реализацию 10 в проекте, потому что эта реализация пробела слишком длинна и трудно помнить (конечно, если вы создаете библиотеку классов, это определенно первое). Реализация 11 можно сказать, что является его улучшенной версией. Заготовки в первой части отключаются при регулярной замене, а более поздняя обработка выполняется собственными методами. Эффект не уступает оригинальной версии, но скорость очень удивительна.
Лучшая версия улучшения метода написания реализации 10 и реализации 11 - это не скорость производительности, а о простой памяти и использовании. И два его предшественника находятся на уровне нулевого миллисекунды, поэтому я буду использовать это для работы и напугать в будущем.