.trim () в JavaScript не работает в IE - PullRequest
455 голосов
/ 22 февраля 2010

Я пытался применить .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

Ответы [ 14 ]

767 голосов
/ 22 февраля 2010

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

if(typeof String.prototype.trim !== 'function') {
  String.prototype.trim = function() {
    return this.replace(/^\s+|\s+$/g, ''); 
  }
}
202 голосов
/ 22 февраля 2010

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

57 голосов
/ 24 декабря 2011

JQuery:

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

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

33 голосов
/ 22 февраля 2010

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

Если вы не используете 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+$/,"");
}
12 голосов
/ 22 февраля 2010

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

Это довольно недавнее дополнение к javascript, и оно не поддерживается IE.

8 голосов
/ 15 июля 2010

У меня была похожая проблема при попытке обрезать значение на входе и затем спросить, равно ли оно ничему:

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

Однако, это бросило гаечный ключ в работах для IE6 - 8. Достаточно досадно, но я попытался изменить его так:

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

Однако, используя метод обрезки jQuery, он прекрасно работает во всех браузерах.

var originalValueTrimmed = $.trim($(this).val());              
            if (originalValueTrimmed  == "") { ... }
5 голосов
/ 07 июня 2013

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

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

TRIM (обрезать с обеих сторон):

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

ИЛИ

Также доступно регулярное выражение, которое мы можем использовать.

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

Полезное объяснение

4 голосов
/ 12 марта 2015

Мы можем получить официальный код из интернета! См. Это:

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 прочитав исходный код, мы сможем получить больше знаний об отделке.

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 голосов
/ 14 января 2014

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

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

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

3 голосов
/ 22 февраля 2010

Я не думаю, что в стандарте JavaScript есть нативный trim() метод. Может быть, Mozilla поставляет один, но если вы хотите один в IE, вам нужно написать его самостоятельно. На этой странице есть несколько версий .

...