IE 7 8 브라우저에서 Trim () 속성을 사용하여 공백을 제거하면 오류 가보고됩니다.
따라서이 문제에 대한 다음과 같은 해결책이 있습니다.
var aa = $ ( "#id"). val (). trim () --- trim () 메소드는 IE에서 구문 분석 할 수 없습니다.
해결책:
[var aa = $ .trim ($ ( "#id"). val ()); ] 이것은 사용하기 쉽지 않으므로 아래에 소개 된 것을 사용하십시오. 첫 번째는 테스트되었습니다.
W3C 사람들의 사람들은 당나귀에 의해 헤드에서 쫓겨 났으며 Java 스크립트 1.8.1까지 트림 기능 (및 Trimleft, Trimright)을 지원하지 않았습니다. 불행히도 Firefox3.5만이 지금 지원합니다. 문자열의 양쪽에서 공백을 제거하는 것이 너무 일반적이므로 모든 주요 라이브러리에는 자체 그림자가 있습니다. 또한 외국인은 많은 연구 에너지를 가지고 있으며 많은 성과를 거두었습니다.
1 OK를 구현하십시오. (JS에 이것을 쓰고 공간을 직접 제거하려는 문자열을 따르십시오 .trim ()).
코드 사본은 다음과 같습니다.
String.prototype.trim = function () {
이 .replace (/^/s/s*/, '') .replace (// s/s*$/, '');
}
그다지 좋아 보이지 않으며 두 개의 정기적 인 교체품을 사용했습니다. 실제 속도는 주로 브라우저의 내부 최적화로 인해 놀랍습니다. 문자열 스 플라이 싱의 유명한 예, 직접 추가는 배열로 만든 StringBuffer보다 빠릅니다. Base2 클래스 라이브러리는이 구현을 적용합니다.
구현 2
코드 사본은 다음과 같습니다.
String.prototype.trim = function () {
이 .replace (/^/s/, '') .replace (// s $/, '');
}
구현 1과 매우 유사하지만 약간 느리게, 주된 이유는 먼저 하나 이상의 공백이 있다고 가정하기 때문입니다. 프로토 타입 .js는이 구현을 사용하지만 이름은 스트립입니다. 프로토 타입 방법은 루비와 이름을 바꾸려고합니다.
구현 3
코드 사본은 다음과 같습니다.
String.prototype.trim = function () {
이 .substring (math.max (this .search (// s/), 0),이 .search (// s/s*$/) 1);
}
빈 부분은 가로 채기 (물론 중간에 공백 문자가 허용됨)에 의해 얻어지고 총 4 개의 기본 방법이 호출됩니다. 사전 설정은 매우 영리하며, 하위 문자열은 두 개의 숫자를 매개 변수로 취합니다. Math.Max는 두 개의 숫자를 매개 변수로 사용하고 검색은 하나의 숫자로 반환됩니다. 속도는 상위 2 위보다 약간 느리지 만 바닥보다 훨씬 빠릅니다.
구현 4
코드 사본은 다음과 같습니다.
String.prototype.trim = function () {
return this .replace (/^/s |/s $/g, '');
}
이를 단순화 된 버전의 구현 2라고 할 수 있으며, 이는 후보 운영자를 사용하여 두 가지 규칙을 연결하는 것입니다. 그러나 그렇게하는 것은 브라우저 최적화 기회를 달성하지 못할 것입니다.
구현 5
코드 사본은 다음과 같습니다.
String.prototype.trim = function () {
var str = this;
str = str.match (// s (? :/s/s)*/);
Return str? 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에서 Madness는 이러한 성능 향상을 설명하고 몇 초 만에 Firefox를 직접 죽일 수 있습니다.
구현 9
코드 사본은 다음과 같습니다.
String.prototype.trim = function () {
이 .replace (/^/s*([/s/s]*?)/s*$/, '$ 1');
}
이번에는 Lazy Matching을 사용하여 Firefox에서 개선 된 비 캡처 그룹화를 대체했으며 IE는 지난번만큼 미쳤습니다.
실현 10
코드 사본은 다음과 같습니다.
String.prototype.trim = function () {
var str = this,
공백 = '/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 (whitespace.indexof (str.charat (i)) === -1) {
str = str.substring (0, i 1);
부서지다;
}
}
whitespace.indexof (str.charat (0)) === -1? str : '';
}
나는 이것을 창조 한 사람이 더 이상 소로 묘사되지는 않지만 신과 같은 수준이라고 말하고 싶습니다. 먼저 가능한 모든 빈 캐릭터를 나열하고 첫 번째 트래버스에서 전면 공백을 잘라 내고 두 번째로 뒷면을 차단합니다. 전체 프로세스는 문자열 처리를 위해 특별히 설계된 기본 방법 인 Indexof 및 Substring 만 사용하며 규칙 성을 적용하지 않습니다. 속도는 놀랍도록 빠르며 내부 바이너리 구현에 가깝게 예상되며 IE 및 Firefox에서 뛰어난 성능을 제공합니다 (물론 다른 브라우저는 의심 할 여지없이). 속도는 또한 모두 0 밀리 초입니다.
구현 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.substring (0, i 1);
부서지다;
}
}
Return str;
}
구현 10은 원래 알려지지 않은 정상 문자열 차단 방법이 정기적 인 교체보다 훨씬 낫지 만 조금 더 복잡하다고 말했습니다. 그러나 규칙이 너무 복잡하지 않은 한 브라우저를 사용하여 규칙 성을 최적화하여 프로그램 실행 효율성을 향상시키고 IE에서 8 성능을 달성 할 수 있습니다. 나는 공백 구현이 너무 길고 기억하기 어렵 기 때문에 일반적으로 프로젝트에 구현 10을 적용 할 것이라고 생각하지 않습니다 (물론 클래스 라이브러리를 구축하는 경우 확실히 시작할 것입니다). 11 구현은 개선 된 버전이라고 할 수 있습니다. 정면의 공백은 정기적으로 교체하여 차단됩니다. 그들은 나중에 기본 방법으로 취급됩니다. 효과는 원래 버전보다 열등하지는 않지만 속도는 놀랍습니다.
구현 12
코드 사본은 다음과 같습니다.
String.prototype.trim = function () {
var str = this,
str = str.replace (/^/s/s*/, ''),
ws = // s/,
i = str.length;
while (ws.test (str.charat (-i));
return str.slice (0, i 1);
}
구현 10 및 구현 11의 더 나은 개선 버전이 작성되었습니다. 성능 속도가 아니라 메모리 및 응용 프로그램의 용이성에 관한 것입니다. 그리고 두 전임자는 또한 제로 밀리 초입니다. 또한 이것을 사용하여 미래에 사람들을 두려워하고 두려워합니다.
다음은 외국인이 제공 한 비교 결과입니다. 실행 배경은이 기사에서 트림 작업을 수행하는 것입니다 (27,600 자 이상).
Firefox 2 IE 6을 구현하십시오
Trim1 15ms Trim2 31ms Trim3 46ms 31ms
TRIM4 47ms 46ms
TRIM5 156ms 1656ms
TRIM6 172ms 2406ms
TRIM7 172ms 1640ms
Trim8 281ms Trim9 125ms 78ms
Trim10 Trim11 Trim12 트림 기능 구현은 자신의 아이디어를 보여줍니다. 원래 저자의 말을 이해하려면 원본 텍스트를 읽으십시오.
JS에는 현재 공간을 제거하는 12 가지 방법이 있습니다.
구현 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+)*/); Return str? 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, whitespace = ' /?/?/?/?/?/?/?/?/?/?/?/?/?/?/?/?/?/?/?/?/?/?/?/?/?/?/?/?/?/?/?/?/?/?/?/?/?/?/?/?/?/?/?/?/?/?/?/?/?/?/?/?/?/?/?/?/?/?/?/? for (var i = 0, len = str.length; i <len; i ++) {if (whitespace.indexof (str.charat (i)) === -1) {str = str.s string (i); 부서지다; }} for (i = str.length -1; i> = 0; i-) {if (whitespace.indexof (str.charat (i)) === -1) {str = str.s string (0, i + 1); 부서지다; }} return whitespace.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)); return str.slice (0, i + 1); }
그다지 좋아 보이지 않으며 두 개의 정기적 인 교체품을 사용했으며, 브라우저의 내부 최적화로 인해 실제 속도는 놀랍습니다. 문자열 스 플라이 싱의 유명한 예는 배열로 만든 StringB보다 빠릅니다. Base2 클래스 라이브러리는이 구현을 사용합니다.
구현 1과 매우 유사하지만 먼저 하나 이상의 공백이 있다고 가정하기 때문에 약간 느립니다. 프로토 타입 .js는이 구현을 사용하지만 프로토 타입 방법은 R y와 동일한 이름을 갖기 때문에 이름입니다.
빈 부분은 가로 채기 (물론 중간에 공백 문자가 허용됩니다), 총 4 개의 기본 방법이 호출됩니다. 매우 영리하게 설계되었으며 S 스트링은 매개 변수로 두 개의 숫자를 취합니다. Math.Max는 두 개의 숫자를 매개 변수로 가져 가고 검색은 숫자를 반환합니다. 속도는 위의 두 가지보다 약간 느리지 만 아래의 대부분보다 빠릅니다.
이를 단순화 된 버전의 구현 2라고 할 수 있으며, 이는 후보 운영자를 사용하여 두 가지 규칙을 연결하는 것입니다. 그러나 그렇게하면 브라우저를 최적화 할 수있는 기회를 잃을 것입니다. 브라우저는 실현만큼 좋지 않습니다.
구현 5
일치는 배열을 반환하므로 요구 사항을 충족하는 원래 문자열의 일부가 해당 요소가됩니다. 문자열의 중간에있는 공백이 제외되지 않도록하려면 비과전 그룹화 (? : exp)를 사용해야합니다. 배열이 비어있을 수 있으므로 나중에 추가 판단을해야합니다. 브라우저는 처리 그룹에서 약하고 한 단어가 느립니다. 따라서 기본적으로 전능하지만 규칙에 대해 미신적이지 마십시오.
구현 6
필요한 부분을 제공하고 빈 문자열에 넣으십시오. 그러나 특히 IE6에서 효율성은 매우 열악합니다.
구현 6과 매우 유사하지만 캡처가 아닌 패킷을 사용하여 장점을 제공하며 성능 효율성이 약간 향상됩니다.
구현 8
나는 위의 두 가지 아이디어를 개선하고, 캡처되지 않은 그룹화와 캐릭터 세트를 사용했으며, *로 대체했습니다. 특히 IE6에서 Madness는 이러한 성능 향상을 설명하고 몇 초 만에 Firefox를 직접 죽일 수 있습니다.
구현 9
이번에는 Lazy Matching을 사용하여 Firefox에서 개선 된 비 캡처 그룹화를 대체했으며 IE는 지난번만큼 미쳤습니다.
실현 10
나는 이것을 창조 한 사람이 더 이상 소로 묘사되지는 않지만 신과 같은 수준이라고 말하고 싶습니다. 먼저 가능한 모든 빈칸을 나열하고 첫 번째 트래버스에서 전면 블랭크를 차단하고 두 번째로 백 블랭크를 차단합니다. 전체 프로세스는 문자열 처리를 위해 특별히 설계된 기본 방법 인 Indexof 및 S String 만 사용하며 규칙을 사용하지 않습니다. 속도는 놀랍도록 빠르며 아마도 내부 바이너리 구현에 가깝고 IE 및 Firefox에서 성능이 우수합니다 (물론 다른 브라우저는 의심 할 여지없이). 속도는 모두 제로 밀리 초입니다.
구현 10은 정상적인 원시 문자열 차단 방법이 정기적 인 교체보다 훨씬 낫지 만 조금 더 복잡하다고 말했습니다. 그러나 규칙 성이 너무 복잡하지 않은 한 브라우저를 사용하여 규칙 성을 최적화하여 IE에서 8 성능을 달성하는 등 프로그램 실행 효율성을 향상시킬 수 있습니다. 나는 공백 구현이 너무 길고 기억하기 어렵 기 때문에 일반적으로 프로젝트에 구현 10을 적용 할 것이라고 생각하지 않습니다 (물론 클래스 라이브러리를 구축하는 경우 확실히 첫 번째입니다). 11 구현은 개선 된 버전이라고 할 수 있습니다. 첫 번째 부분의 공백은 정기적으로 교체하여 차단되며 이후 처리는 기본 방법으로 수행됩니다. 효과는 원래 버전보다 열등하지는 않지만 속도는 매우 놀랍습니다.
Writing 구현 방법 10 및 구현 11의 더 나은 개선 버전은 성능 속도가 아니라 쉬운 메모리 및 사용에 관한 것입니다. 그리고 두 전임자는 제로 밀리 초 수준이므로 앞으로도 효과가 있고 겁을 먹을 것입니다.