我正在使用此代码来检测字符串中的新行。
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]-->