Разбить строку на массив с помощью Javascript в IE8 - PullRequest
2 голосов
/ 28 января 2012

У меня есть строка, которую нужно разделить на три символа подчеркивания.Пример строки может быть:

var stringItemsPlanner = "Hello this___is a string___which___needs splitting into___an array";

Так что я использую функцию Split ().Хорошо во всем, кроме IE8 (и, вероятно, 7 тоже, но не пробовал), который выдает ошибку «Объект не поддерживает это свойство или метод», если строка не содержит этих символов.Итак, я нашел другой пост, в котором говорится, что перед разделением в строке появляются символы подчеркивания, поэтому я делаю это:

if (stringItemsPlanner.indexOf('___') == -1){
    arrItemsPlanner = [];
}else{
    arrItemsPlanner = stringItemsPlanner.split('___');
}

Но теперь это тоже ошибки, потому что, по-видимому, IE8 не поддерживает indexOf.

После долгих поисков я попытался добавить код в начало моего скрипта, чтобы он действовал как «полифайл» для этого метода:

if (!Array.prototype.indexOf){
  Array.prototype.indexOf = function(elt /*, from*/){
    var len = this.length >>> 0;
    var from = Number(arguments[1]) || 0;
    from = (from < 0)? Math.ceil(from) : Math.floor(from);
    if (from < 0){
      from += len;
      for (; from < len; from++){
        if (from in this && this[from] === elt){
          return from;
        }
        return -1;
      };
    }
  }
}

Но все равно не радость.

Сейчас я на грани разочарования и не могу придумать другого способа заставить эту простую вещь работать.

Может кто-нибудь пролить свет на это или придумать альтернативу?способ безопасно разделить строку на массив таким образом, который работает кросс-браузер?Это должно быть просто, но я просто не могу думать прямо сейчас.

Спасибо всем!

1 Ответ

1 голос
/ 28 января 2012

Взгляните сюда

http://jsfiddle.net/mplungjan/Bnx6m/

var stringItemsPlanner = "Hello this___is a string___which___needs splitting into___an array";

var arrItemsPlanner = (stringItemsPlanner.length==0 || stringItemsPlanner.indexOf('___') == -1)? []:stringItemsPlanner.split('___');

alert(arrItemsPlanner.join('\n'))
...