Javascript split()在IE中不起作用

时间:2011-12-14 21:15:18

标签: javascript jquery internet-explorer split

假设我有一个带有 textarea 的文字:

  1. 第一行文字。
  2. 第二行,其他文字。下一行将是空的。
  3. (空行)
  4. (空行)
  5. 最后一行
  6. 如您所见,第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

    {/ 3>}中的{p> 解决方案

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

3 个答案:

答案 0 :(得分:6)

正则表达式拆分在IE8及更低版本中表现得很奇怪。使用字符串比较,它似乎工作(fiddle

testText.split("\n")

而不是

testText.split(/\n/)

[编辑] 来自Steven Levithan's Blog

  

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

答案 1 :(得分:2)

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

答案 2 :(得分:2)

我在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/