私のJavaScriptプログラムの一つで、文字列に .trim()
を適用しようとしました。 Mozillaでも問題なく動作しますが、IE8で試してみるとエラーが表示されます。誰もがここで何が起こっているのか知っていますか?私はそれをIEで動作させることができるとにかくありますか?
var ID = document.getElementByID('rep_id').value.trim();
メッセージ:オブジェクトはこのプロパティまたはメソッドをサポートしていません。 行:604 Char:2 コード:0 URI:http://test.localhost/ test.js
次のコードを追加して、文字列にトリム機能を追加します。
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ではうまくいきません。
残念ながら、ブラウザ間での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+$/,"");
}
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 == "") { ... }
トリム機能を実装するためのコードをいくつか書きました。
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, '');
}
インターネットから公式コードを入手することができます。これを参照してください。
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);
JavaScript標準にネイティブのtrim()
メソッドがあるとは思いません。たぶんMozillaがそれを提供していますが、あなたがIEでそれを欲しいなら、あなたはそれをあなた自身が書く必要があります。このページにはいくつかのバージョンがあります。
私はIE9で同じ問題を抱えていた
<!DOCTYPE html>
<HTML>
<HEAD>...
.
.
問題は解決しました。
この問題は、イントラネットサイトでIEを互換モードで使用していることが原因で発生する可能性があります。これを解決する2つの方法があります、あなたのローカルマシンで互換モードを使用しないようにIEを更新することができます
いっそのことあなたのウェブページのメタタグを更新することができます。加える:
...
<head>
<meta http-equiv="X-UA-Compatible" content="IE=Edge">
</head>
...
これは何を意味するのでしょうか?最新の互換モードを使用するようにIEに指示しています。詳細については、 MSDNを参照してください。レガシドキュメントモードの指定
IEがtrim()
のサポートをやめていることがわかりました、おそらく最近のwindowsの更新の後です。もしあなたがdojoを使えば、あなたはdojo.string.trim()
を使うことができます、それはクロスプラットフォームで動作します。
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);
}
これは、タイプミスgetElementByIDが原因です。 getElementByIdに変更してください。