このコードを使用して、文字列内の新しい行を検出しています。
var result = str.split(/\r\n|\r|\n/g);
ただし、IE8では、最初にのみ連続する新しい行がある場合、文字列は分割されます。
例:
Hello
...\n
people
のように扱われます
Hello
people
解決策やアドバイスに感謝します。
このコードを使用して、文字列内の新しい行を検出しています。
var result = str.split(/\r\n|\r|\n/g);
ただし、IE8では、最初にのみ連続する新しい行がある場合、文字列は分割されます。
例:
Hello
...\n
people
のように扱われます
Hello
people
解決策やアドバイスに感謝します。
古いバージョンのIE(IE8以前)には既知のバグがあり、split()
空の要素が削除されます。これはまさにあなたが報告している問題です。
このバグはIE9で修正されていますが、それより古いバージョンのIEをサポートする必要がある場合は、この問題が発生します。
このバグを回避するのは本当に簡単ではありません。関数を完全にオーバーライドするsplit()
ことを提案している人を見たことがありますが、それはやり過ぎのようです(意図しない副作用が発生する可能性があります)。
過去にこの問題が発生したときは、フィールドが空白であっても、常に値が設定されていることを確認することになりました。空白のフィールドの場合は、スペースまたはゼロ、あるいは後で削除できるマーカー文字にしました。この例では、そのソリューションがどれほど役立つかわかりませんが、それが私が行ったことです。
これには回避策があると思います。replace(separator, '\0')
最初に使用してからsplit('\0')
完全ではありませんが、機能します。
例
'a||b'.replace(/\|/g, '\0').split('\0'); // => ['a', '', 'b'];
そして、これを分割の修正として使用します。これは、SDCの回答で提案されているものよりも優れているようです(標準ではありませんが、単純で、空の要素の削除の問題を修正します)。コメントに入れることができます。
<!--[if IE lt 9]><script type="text/javascript">
(function(orgSplit) {
String.prototype.split = function(seperator, limit) {
if (seperator instanceof RegExp)
return this.replace(seperator, '\0').split('\0', limit);
else
return orgSplit.call(this, seperator, limit);
};
})(String.prototype.split);
</script><![endif]-->