.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

Ответ 1

Добавьте следующий код, чтобы добавить функциональность триммера в строку.

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

Ответ 2

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

Ответ 3

JQuery

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

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

Ответ 4

К сожалению, для trim() не поддерживается перекрестная поддержка JavaScript 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+$/,"");
}

Ответ 6

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

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

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

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

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

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

Ответ 7

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

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

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

Ответ 8

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

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

Ответ 9

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

Ответ 10

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

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

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

Ответ 11

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

Ответ 12

Просто выяснилось, что IE перестает поддерживать trim(), возможно, после недавнего обновления Windows. Если вы используете dojo, вы можете использовать dojo.string.trim(), он работает с кросс-платформой.

Ответ 13

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

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

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

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

Ответ 14

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