source

JavaScript의 .trim()이 IE에서 작동하지 않음

nicesource 2022. 11. 4. 21:24
반응형

JavaScript의 .trim()이 IE에서 작동하지 않음

JavaScript 프로그램 중 하나의 문자열에 적용하려고 했습니다.Mozilla에서는 정상적으로 동작하고 있습니다만, IE8에서 시도하면 에러가 표시됩니다.여기서 무슨 일이 일어나고 있는지 아는 사람 있나요?IE에서 작동시킬 수 있는 방법이 있나요?

코드:

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

에러 표시:

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

다음 코드를 추가하여 문자열에 트림 기능을 추가합니다.

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

IE에서는 그 기능이 실장되어 있지 않은 것 같습니다.jQuery를 사용하는 경우 대신 을 사용할 수 있습니다(jQuery 3.5부터는 사용되지 않습니다).

j쿼리:

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

사용하다$("#mycomment").val().trim();IE를 사용하다

안타깝게도 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+$/,"");
}

https://developer.mozilla.org/En/Core_JavaScript_1.5_Reference/Global_Objects/String/Trim

이것은 javascript에 새로 추가된 것으로 IE에서는 지원되지 않습니다.

입력에서 값을 잘라내려고 할 때도 같은 문제가 있었습니다.

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

그러나 IE6 - 8에서는 스패너에 문제가 생겼습니다.귀찮게도, 나는 그것을 그렇게 바꾸려고 하고 있었습니다.

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

단, jQuery의 트리밍 방식을 사용하여 모든 브라우저에서 완벽하게 동작합니다.

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

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

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, '');
}

유용한 설명

인터넷에서 공식 코드를 얻을 수 있어!다음을 참조하십시오.

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);

것 요.trim()메서드를 지정합니다.Mozilla가 제공할 수도 있지만 IE에서 사용하려면 직접 작성해야 합니다. 페이지에는 몇 가지 버전이 있습니다.

IE9에서도 같은 문제가 있었습니다만, 다음의 태그로 서포트되고 있는html 버전을 선언했을 때,

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

문제는 해결되었다.

이는 오타 오류 getElementBy 때문입니다.ID. getElementBy로 변경합니다.아이디

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);
}

IE가 지원을 중단한다는 것을 방금 알게 되었습니다.trim()최신 윈도 업데이트 후일 수 있습니다.dojo를 사용하면dojo.string.trim()플랫폼 간에 동작합니다.

이 문제는 IE가 인트라넷사이트에서 호환성 모드를 사용하고 있기 때문에 발생할 수 있습니다.이 문제를 해결하려면 두 가지 방법이 있습니다.로컬 머신에서 IE를 업데이트하여 호환성 모드를 사용하지 않도록 할 수 있습니다(IE11:툴 ->호환성 보기 설정 -> 호환성 보기에서 인트라넷 사이트 표시를 선택 해제).

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

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

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

언급URL : https://stackoverflow.com/questions/2308134/trim-in-javascript-not-working-in-ie

반응형