【问题标题】:Javascript split() not working in IEJavascript split() 在 IE 中不起作用
【发布时间】:2012-01-20 15:44:47
【问题描述】:

假设我有一个带有此文本的 textarea

  1. 第一行一些文字。
  2. 第二行,其他文字。下一行将为空。
  3. (空行)
  4. (空行)
  5. 这里是最后一行

如您所见,第 3 行和第 4 行是空的 (\n)。我需要获得确切的行结构(也有空行)并将其转换为数组。每行都是数组的一个元素。这是我当前的代码:

var lines = $('#q').val().split(/\n/);
alert(lines.length); //using alert() because IE doesn't support console.log()
var texts = [];
for(i = 0; i < lines.length; i++) {
    texts.push($.trim(encodeURIComponent(lines[i])));
}

它适用于所有浏览器,除了 IE。出于某种原因,split() 函数会忽略 IE 中的空行(3 和 4)。因此,它们永远不会传递到数组中:s

解决方案Squeegy 在 cmets 中

split(/\n/) 替换为split("\n") - 该死的IE!

【问题讨论】:

  • 尝试用字符串代替? "\n"
  • 哇...就是这么简单。谢谢!
  • 这是一个完全随机的猜测,老实说。这就是为什么它不是一个答案。所以我无法解释为什么,但也许其他人可以并且你可以接受这个答案。

标签: javascript jquery internet-explorer split


【解决方案1】:

正则表达式拆分在 IE8 及更低版本中表现异常。改用字符串比较,它似乎可以工作 (fiddle)

testText.split("\n")

而不是

testText.split(/\n/)

[编辑]来自Steven Levithan's Blog

Internet Explorer 从结果中排除几乎所有空值 数组(例如,当两个分隔符在 数据,或者当数据的开头或结尾出现分隔符时)

【讨论】:

  • 这是一个很好的答案,因为我的问题是在 OP 的外围。我想要空元素,它们在 IE8 中不存在。这解决了我的问题。 FWIW [x.split(/delimiter/)] 向前显示 IE9 中的空元素。
【解决方案2】:

JavaScript: split doesn't work in IE? 可能重复? Internet Explorer 从结果数组中排除了几乎所有的空值(例如,当两个分隔符在数据中彼此相邻时,或者当分隔符出现在数据的开头或结尾时)。

【讨论】:

  • 您知道相同场景和 .test() 函数的任何解决方法吗?例如:/\n/.test(string)
【解决方案3】:

我在 IE 中看到与 .split() 和新行相同的古怪行为。您可以使用自己的拆分功能更紧密地控制它:

function mySplit(str, ch) {
    var pos, start = 0, result = [];
    while ((pos = str.indexOf(ch, start)) != -1) {
        result.push(str.substring(start, pos));
        start = pos + 1;
    }
    result.push(str.substr(start));
    return(result);    
}

此处的工作示例:http://jsfiddle.net/jfriend00/xQTNZ/

【讨论】:

  • @andufo - 只是str.indexOf("\n") != -1
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-16
  • 2016-01-21
  • 2015-06-17
  • 2012-09-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多