IE에서 JavaScript가 작동하지 않는 .trim ()


460

.trim()JavaScript 프로그램 중 하나에서 문자열에 적용하려고했습니다 . Mozilla에서는 제대로 작동하지만 IE8에서 시도하면 오류가 표시됩니다. 아무도 여기서 무슨 일이 일어나고 있는지 알고 있습니까? 어쨌든 IE에서 작동시킬 수 있습니까?

암호:

var ID = document.getElementByID('rep_id').value.trim();

오류 표시 :

메시지 : 개체가이 속성 또는 메서드를 지원하지 않습니다
줄 : 604
문자 : 2
코드 : 0
URI : http : //test.localhost/test.js

2
컴퓨터에 저장된 내용을 볼 수 없습니다. test.js를 스토리지 웹 사이트에 업로드 할 수 있습니까? 또한 실제 trim () 함수를보고 무엇이 잘못되었는지 확인해야합니다. 감사!
Warty

6
@ItzWarty "whatever ".trim()는 IE8에서 시도해보십시오.
Dan Rosenstark


8
에 대한 IE8 호환성을 trim()Google에서 확인했으며 지원되지 않는다고 생각했을 때 내 눈을 믿지 않을 것입니다. 그것을 정리해 주셔서 감사합니다. 당신이 요청한 것과 똑같은 질문을하려고했습니다.
Mathias Lykkegaard Lorenzen

답변:


773

문자열에 트림 기능을 추가하려면 다음 코드를 추가하십시오.

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

8
좋은 대답입니다. 그 주 replace(/^\s\s*/, '').replace(/\s\s*$/, '')빠른 3 배 이상에 대해해야 replace(/^\s+|\s+$/, '')한 벤치 마크에 따르면, 파이어 폭스 2 : blog.stevenlevithan.com/archives/faster-trim-javascript
다니엘 Vassallo에게

92
또한 replace(/^\s+|\s+$/, '')선행 또는 후행 공백 만 제거하며 이는 트림 기능에서 예상되는 동작이 아닙니다. 선행 및 후행 공백을 모두 제거하려면을 사용해야 replace(/^\s+|\s+$/g, '')합니다.
Massimiliano Fliri

1
나에게 약간 어리석은 것 같습니다. 모든 js 프레임 워크가 유틸리티 trim () 함수를 제공하지는 않습니까? 이것이 당신이 가진 유일한 문제라면 괜찮습니다. 그러나 IE가 "다른"방법으로 라이브러리를 단기적으로 가치있게 만들 수있는 방법이 많이 있습니다.
Stephen

6
@Stephen 네 맞습니다.하지만 질문은 프레임 워크에 관한 것이 아닙니다. 그것은 자바 스크립트 및 트림에 관한 것입니다.
Ben Rowe

3
jQuery를 사용하지 않으면 좋은 솔루션입니다. 그러나 그렇지 않은 경우 $ .trim ()이 스크립트를 조금 더 단순하게 유지하므로 훨씬 더 나은 솔루션 인 것 같습니다.
NLemay

203

해당 기능이 IE에서 구현되지 않은 것 같습니다. jQuery를 사용 $.trim()하는 경우 대신 http://api.jquery.com/jQuery.trim/을 사용할 수 있습니다 .


17
이제 jQuery를 좋아하지만 .trim () 용으로 가져 오기만하면 과잉이됩니다.
Erik

71
동의한다. ) = "당신은 ... jQuery를 사용하는 경우"내가 말한 이유의이
jrummell

@Erik은 Jin이 겪을 유일한 IE 문제일까요? 라이브러리의 브라우저 살균 기능을 사용하지 않고도 쓸 수있는 유용한 자바 스크립트가 많지 않습니다.
Stephen

8
$ .trim ()은 $ (<element> .val (). trim ()과 다릅니다. 자세한 내용은 여기 : stackoverflow.com/questions/4315570/…
sami

57

jQuery :

$.trim( $("#mycomment").val() );

누군가가 사용 $("#mycomment").val().trim();하지만 IE에서는 작동하지 않습니다.


1
이 썩은 흔들리는 오래된 브라우저-다리에서 우리에게 많은 두통을 구해 준 완벽한 답변 주셔서 감사합니다 :)
Awerealis

1
jQuery가 좋은 이유의 좋은 예입니다.
Andrew Plummer

그 방법은 브라우저 간입니까?
toha

2
@toha, 크로스 브라우저 인 것은 jQuery
Raystorm

맞습니다. 나는 추측한다. 감사합니다
toha

34

불행히도 trim ()에 대한 크로스 브라우저 JavaScript 지원은 없습니다.

jQuery (.trim () 메소드가 있음)를 사용하지 않는 경우 다음 메소드를 사용하여 문자열에 트림 지원을 추가 할 수 있습니다.

String.prototype.trim = function() {
    return this.replace(/^\s+|\s+$/g,"");
}
String.prototype.ltrim = function() {
    return this.replace(/^\s+/,"");
}
String.prototype.rtrim = function() {
    return this.replace(/\s+$/,"");
}


8

입력에서 값을 자르고 아무것도 아닌지 물을 때 비슷한 문제가 발생했습니다.

if ($(this).val().trim() == "")

그러나 이것은 IE6-8의 작업에서 스패너를 던졌습니다. 짜증나게 충분히 나는 그것을 이렇게 var를 시도했습니다.

   var originalValue = $(this).val();

그러나 jQuery의 트리밍 방법을 사용하면 모든 브라우저에서 완벽하게 작동합니다.

var originalValueTrimmed = $.trim($(this).val());              
            if (originalValueTrimmed  == "") { ... }

5

트림 기능을 구현하는 코드를 작성했습니다.

LTRIM (왼쪽 손질) :

function ltrim(s)
{
    var l=0;
    while(l < s.length && s[l] == ' ')
    {   l++; }
    return s.substring(l, s.length);
} 

RTRIM (트림 오른쪽) :

function rtrim(s)
{
    var r=s.length -1;
    while(r > 0 && s[r] == ' ')
    {   r-=1;   }
    return s.substring(0, r+1);
 }

트림 (양쪽 트림) :

function trim(s)
{
    return rtrim(ltrim(s));
}

또는

정규식도 사용할 수 있습니다.

function trimStr(str) {
  return str.replace(/^\s+|\s+$/g, '');
}

유용한 설명


3
당신의 오래된 학교 검색 및 처리하지 않는 코드를 파괴 \t, \r, \n등. 만 spaces. 실제로 모든 것을 수동으로 처리하려는 노력을 기울이고 싶지 않다면 Regexp가 더 좋습니다.
CodeAngry

4

인터넷에서 공식 코드를 얻을 수 있습니다! 이것을 참조하십시오 :

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/trim

다른 코드보다 먼저 다음 코드를 실행하면 기본적으로 사용할 수없는 경우 trim ()이 생성됩니다.

if (!String.prototype.trim) {
  (function() {
    // Make sure we trim BOM and NBSP
    var rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;
    String.prototype.trim = function() {
      return this.replace(rtrim, '');
    };
  })();
}

자세한 내용 : 소스 코드를 읽음으로써 EcmaScript 5를 지원하기위한 js 프로젝트가 있음을 발견했습니다 : https://github.com/es-shims/es5-shim , 우리는 트림에 대한 더 많은 지식을 얻을 수 있습니다.

defineProperties(StringPrototype, {
 // http://blog.stevenlevithan.com/archives/faster-trim-javascript
 // http://perfectionkills.com/whitespace-deviations/
  trim: function trim() {
    if (typeof this === 'undefined' || this === null) {
      throw new TypeError("can't convert " + this + ' to object');
    }
    return String(this).replace(trimBeginRegexp, '').replace(trimEndRegexp, '');
  }
}, hasTrimWhitespaceBug);

3

trim()JavaScript 표준 에는 기본 방법 이 없다고 생각 합니다. 모질라가 하나를 제공 할 수도 있지만, IE에서 하나를 원한다면 직접 작성해야합니다. 이 페이지 에는 몇 가지 버전 있습니다.


3

IE9에서 동일한 문제가 있었지만 첫 번째 줄에 다음 태그가있는 지원되는 HTML 버전을 선언했을 때

<!DOCTYPE html>
<HTML>
<HEAD>...
.
.

문제가 해결되었습니다.


1

이것은 오타 getElementBy ID 오류 때문입니다 . getElementById로 변경하십시오.


0
var res = function(str){
    var ob; var oe;
    for(var i = 0; i < str.length; i++){
        if(str.charAt(i) != " " && ob == undefined){ob = i;}
        if(str.charAt(i) != " "){oe = i;}
    }
    return str.substring(ob,oe+1);
}

1
간단한 교체를 사용할 수있을 때 루프를 수행하는 이유, 시간이 중요 할 때 매우 나쁜 이유는 무엇입니까? 평균 크기의 텍스트 에서이 메소드를 200 번 호출하고 jQuery가 제공하는 다른 구현을 호출하면 내가 무슨 말을하는지 알 수 있습니다. )
Dany Khalife 2018

1
어떤 경우에는 루프가 정규 표현식보다 빠르기 때문입니다. JW가 일부 벤치 마크, 특히 주석에 대한 답변에 게시 한 링크를 참조하십시오 (원래 벤치 마크가 상당히 오래 되었기 때문에).
Eric

0

trim()아마도 최근 Windows 업데이트 후에 IE가 지원을 중단한다는 것을 알았습니다 . dojo를 사용하면을 사용할 수 있으며 dojo.string.trim()크로스 플랫폼에서 작동합니다.


0

이 문제는 인트라넷 사이트에서 호환성 모드를 사용하는 IE로 인해 발생할 수 있습니다. 이 문제를 해결하는 두 가지 방법이 있습니다 .IE11을 로컬 컴퓨터에서 호환 모드를 사용하지 않도록 업데이트 할 수 있습니다 (IE11의 경우 : 도구-> 호환성보기 설정-> 호환성보기에서 인트라넷 사이트 표시 선택 해제).

더 나은 방법은 웹 페이지에서 메타 태그를 업데이트 할 수 있습니다. 추가 :

...
<head>
   <meta http-equiv="X-UA-Compatible" content="IE=edge">
</head>
...

이것은 무엇을 의미 하는가? IE에게 최신 호환성 모드를 사용하도록 지시하고 있습니다. 자세한 내용은 MSDN 에서 확인할 수 있습니다 : 레거시 문서 모드 지정

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.