0

このコードを使用して、文字列内の新しい行を検出しています。

var result = str.split(/\r\n|\r|\n/g);

ただし、IE8では、最初にのみ連続する新しい行がある場合、文字列は分割されます。

例:

Hello
  ...\n
people

のように扱われます

Hello
people

解決策やアドバイスに感謝します。

4

2 に答える 2

2

古いバージョンのIE(IE8以前)には既知のバグがあり、split()空の要素が削除されます。これはまさにあなたが報告している問題です。

このバグはIE9で修正されていますが、それより古いバージョンのIEをサポートする必要がある場合は、この問題が発生します。

このバグを回避するのは本当に簡単ではありません。関数を完全にオーバーライドするsplit()ことを提案している人を見たことがありますが、それはやり過ぎのようです(意図しない副作用が発生する可能性があります)。

過去にこの問題が発生したときは、フィールドが空白であっても、常に値が設定されていることを確認することになりました。空白のフィールドの場合は、スペースまたはゼロ、あるいは後で削除できるマーカー文字にしました。この例では、そのソリューションがどれほど役立つかわかりませんが、それが私が行ったことです。

于 2012-11-16T14:35:09.117 に答える
1

これには回避策があると思います。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]-->
于 2012-11-16T14:51:11.590 に答える