Javascript split () не работает в IE - PullRequest
4 голосов
/ 15 декабря 2011

Допустим, у меня есть 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 () игнорирует пустые строки (3 и 4) в IE. Из-за этого они никогда не передаются в массив: s

Решение от Squeegy в комментариях

Замените split(/\n/) на split("\n") - черт возьми, IE!

Ответы [ 3 ]

6 голосов
/ 15 декабря 2011

Разделение регулярных выражений ведет себя странно в IE8 и ниже.Вместо этого используйте сравнение строк, и оно работает ( fiddle )

testText.split("\n")

вместо

testText.split(/\n/)

[Редактировать] С Блог Стивена Левитана :

Internet Explorer исключает почти все пустые значения из результирующего массива (например, когда в данных появляются два разделителя рядом друг с другом,или когда в начале или конце данных появляется разделитель)

2 голосов
/ 15 декабря 2011

Я вижу такое же странное поведение в 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/.

2 голосов
/ 15 декабря 2011

Возможный дубликат JavaScript: в IE не работает разбиение? ?Internet Explorer исключает почти все пустые значения из результирующего массива (например, когда два разделителя появляются в данных рядом друг с другом или когда в начале или конце данных появляется разделитель).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...