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.