.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
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() метод) вы можете использовать следующие методы для добавления поддержки обрезки строк:
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. Достаточно досадно, что я попытался это так состряпать:--4-->
var originalValue = $(this).val();
однако, используя метод trim 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: указание устаревших режимов документов