2007年12月08日(土)

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

【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なので使えないですが……。

この記事をニフティクリップβに追加 この記事をはてなブックマークに追加 2007/12/08(土) 16:22 | | 記事の編集(管理者用)

風柳へひとこと(web拍手) 

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

覚書」カテゴリの記事

トラックバック

この記事のトラックバックURL:

記事との関連性が薄いものやSPAM等、管理人が不適切と見なしたトラックバックについては予告無く削除する場合が有ります。悪しからずご了承下さい。

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/161784/17309862

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

コメント

コメントを書く