web-dev-qa-db-ja.com

JavaScriptの.trim()がIEで機能しない

私のJavaScriptプログラムの一つで、文字列に .trim() を適用しようとしました。 Mozillaでも問題なく動作しますが、IE8で試してみるとエラーが表示されます。誰もがここで何が起こっているのか知っていますか?私はそれをIEで動作させることができるとにかくありますか?

コード:

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

エラー表示:

メッセージ:オブジェクトはこのプロパティまたはメソッドをサポートしていません。
行:604 
 Char:2 
コード:0 
 URI:http://test.localhost/ test.js
455
Jin Yong

次のコードを追加して、文字列にトリム機能を追加します。

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

その機能はIEには実装されていないようです。 jQueryを使用している場合は、代わりに$.trim()を使用できます( http://api.jquery.com/jQuery.trim/ )。

202
jrummell

jQuery:

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

誰かが$("#mycomment").val().trim();を使っていますが、これはIEではうまくいきません。

57
Dan

残念ながら、ブラウザ間での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+$/,"");
}
33
Iain Collins

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

これは最近JavaScriptに追加されたもので、IEではサポートされていません。

12
Erik

入力から値をトリミングして、それが何も等しくないかどうかを尋ねようとしたときにも、同様の問題がありました。

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

しかしながら、これはIE6 - 8のための作品にスパナを投げました。

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

しかし、jQueryのトリムメソッドを使用して、すべてのブラウザで私のために完璧に動作します..

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

トリム機能を実装するためのコードをいくつか書きました。

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

便利な説明

5
shiv.mymail

インターネットから公式コードを入手することができます。これを参照してください。

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);
4
Will V King

JavaScript標準にネイティブのtrim()メソッドがあるとは思いません。たぶんMozillaがそれを提供していますが、あなたがIEでそれを欲しいなら、あなたはそれをあなた自身が書く必要があります。このページにはいくつかのバージョンがあります。

3
JW.

私はIE9で同じ問題を抱えていた

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

問題は解決しました。

3
Mark

この問題は、イントラネットサイトでIEを互換モードで使用していることが原因で発生する可能性があります。これを解決する2つの方法があります、あなたのローカルマシンで互換モードを使用しないようにIEを更新することができます

いっそのことあなたのウェブページのメタタグを更新することができます。加える:

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

これは何を意味するのでしょうか?最新の互換モードを使用するようにIEに指示しています。詳細については、 MSDNを参照してください。レガシドキュメントモードの指定

0
FuzzyJulz

IEがtrim()のサポートをやめていることがわかりました、おそらく最近のwindowsの更新の後です。もしあなたがdojoを使えば、あなたはdojo.string.trim()を使うことができます、それはクロスプラットフォームで動作します。

0
David Zhao
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);
}
0
Dhaval dave

これは、タイプミスgetElementByIDが原因です。 getElementByIdに変更してください。

0
Jobelle