« 【JavaScript】IE6におけるtable要素の初期化 | トップページ | 【JavaScript】IE6でTABLE要素内をHTMLで書換える関数 »

2007/12/08

【JavaScript】IE6のString.split()の不具合と対策

IE6のString.split()では、区切り文字(delimiter)を正規表現で指定したときに不具合があるようです。
具体的には、例えば『javascript:alert(',,'.split(/,/).length)』を実行すると、結果が「0」になってしまいます(正しくは「3」)。
ちなみにIE6でも『javascript:alert(',,'.split(',').length)』のように、正規表現を使わなかった場合には、結果が正しく「3」となります。
どうも、区切り文字で正規表現を指定した場合には、結果の文字列が ""(null) になるものは候補から外れてしまう、という動作になっているように思われます。
これはどう考えても仕様じゃなくてバグだよなぁ……。
そんなわけで、String.split() を使う場合には注意が必要です。
対策としては、次のようにして String.prototype.split を置換してやるとよいかもしれません。

【2007/12/11追記】
他にもいろいろ問題がありそうなので(例えばString.split()のブラウザでの差異 - ?D of K)、ちゃんとした対策が必要なら、『JavaScript split Inconsistencies & Bugs: Fixed!』を使用するのがよいと思われます。
if (navigator.userAgent.match(/msie/i)) {
    String.prototype.split=function(sreg){
        var text=this, reg=(typeof sreg=='string')?RegExp(sreg,'g'):RegExp(sreg.source,'g'+((sreg.ignoreCase)?'i':'')+((sreg.multiline)?'m':''));
        if (!reg.source) return [text];
        var sindex=0, eindex, elms=[];
        do {
            reg.exec(text);
            eindex=reg.lastIndex;
            elms.push(text.substring(sindex,(eindex)?eindex:text.length).replace(sreg,''));
            sindex=eindex;
        } while (sindex);
        return elms;
    }
}
ちなみに、これも『404 Blog Not Found:Google Code Chart - 折れ線グラフうぃざ~ど』で気付きました。
【2007/12/09追記】
IE6限定ということで、
elms.push(text.substring(sindex,(eindex)?eindex:text.length).replace(sreg,''));
の部分は
elms.push(text.substring(sindex,(eindex)?RegExp.index:text.length));
に変えた方が速くなりそうですね。
IE以外だとRegExp.indexがundefinedなので使えないですが……。

« 【JavaScript】IE6におけるtable要素の初期化 | トップページ | 【JavaScript】IE6でTABLE要素内をHTMLで書換える関数 »

パソコン・インターネット」カテゴリの記事

覚書」カテゴリの記事

コメント

コメントを書く

(ウェブ上には掲載しません)

トラックバック


この記事へのトラックバック一覧です: 【JavaScript】IE6のString.split()の不具合と対策:

« 【JavaScript】IE6におけるtable要素の初期化 | トップページ | 【JavaScript】IE6でTABLE要素内をHTMLで書換える関数 »

戻るリンク追加

カレンダー

2020年3月
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31        

ココログカレンダーPlus(旧2)

検索


    • Web全体 サイト内
    • 蔵書のISBNを入力して下さい
    • はじめる前
      初級者向け
      上級者向け
      ブログ紹介
      結果を表示

コメントリストツリー化

無料ブログはココログ