.trim() в JavaScript не работает в IE



Я пытался применить .trim() к строке в одной из моих программ JavaScript. Он отлично работает под Mozilla, но отображается ошибка, когда я пытаюсь это сделать в IE8. Кто-нибудь знает, что здесь происходит? Есть в любом случае я могу заставить его работать в IE?



код:



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


отображать сообщение об ошибке:



Message: Object doesn't support this property or method
Line: 604
Char: 2
Code: 0
URI: http://test.localhost/test.js
746   14  

14 ответов:

добавьте следующий код для добавления функции обрезки в строку.

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

похоже, что эта функция не реализована в IE. Если вы используете jQuery, вы можете использовать $.trim() вместо этого (http://api.jquery.com/jQuery.trim/).

jQuery:

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

кто-то использует $("#mycomment").val().trim(); но это не будет работать в IE.

к сожалению, нет кроссбраузерной поддержки JavaScript для trim ().

Если вы не используете jQuery (который имеет .метод trim () для добавления поддержки 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  == "") { ... }

Я написал некоторый код для реализации функции trim.

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

дополнительные: Я только что обнаружил, что есть проект js для поддержки EcmaScript 5: https://github.com/es-shims/es5-shim по прочтении исходный код, мы можем получить больше знаний о TRIM.

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() метод в стандарте JavaScript. Возможно, Mozilla поставляет один, но если вы хотите его в IE, вам нужно будет написать его самостоятельно. Есть несколько версий на на этой странице.

У меня была такая же проблема в IE9 Однако, когда я объявил поддерживаемую версию html со следующим тегом в первой строке перед

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

проблема была решена.

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(), вероятно, после недавнего обновления windows. Если вы используете dojo, вы можете использовать dojo.string.trim(), он работает кросс-платформенный.

эта проблема может быть вызвана IE, использующим режим совместимости на сайтах интрасети. Есть два способа решить эту проблему, вы можете либо обновить IE, чтобы не использовать режим совместимости на локальном компьютере (в IE11: Инструменты-> Параметры просмотра совместимости -> снимите флажок Отображать сайты интрасети в режиме совместимости)

еще лучше вы можете изменить мета-теги в Вашей странице. Добавить в:

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

что это значит? Он говорит IE использовать последний режим совместимости. Больше информация доступна в MSDN: указание режимов устаревших документов

Это из-за ошибки опечатки getElementBy ID. Измените его на getElementById

Comments

    Ничего не найдено.