2013-11-21 3 views
0

Я написал простую функцию replaceAll, которая расширяет String.prototype.Допустимый вывод в IE9, но неопределенный вывод в IE7/IE8

String.prototype.replaceAll = function (removalChar, insertionChar) { 
    var output = ""; 
    for (var i = 0; i < this.length; i++) { 
     if(this[i] == removalChar) { 
      output += insertionChar; 
     } 
     else { 
      output += this[i]; 
     } 
    } 
    return output; 
} 

код теста:

var test = "Hello-1-2-3"; 
alert(test.replaceAll("-"," ")); 


Мой тестовый код оповещения во всех браузерах, включая IE9 Hello 1 2 3.

Но в IE7 и 8, выход я получаю что-то вроде этого: undefinedundefinedundefinedundefinedundefinedundefined...


jsFiddle: http://jsfiddle.net/cd4Z2/ (попробуйте это в IE7/IE8)


Как мог Я могу переписать функцию, чтобы она работала на IE7/8 без нарушения ее поведения в других браузерах?

+0

Спасибо за все супер-быстрый ответ! Я решил «принять» ответ Сатурникса за то, что он был самым подробным, но ответы Teemu и wiz kid тоже довольно крутые! – SNag

ответ

3

Вы не можете получить доступ к строковым символам с this[i] в IE7/8. Используйте .charAt(i) вместо этого, как описано здесь:

Javascript strings - getting the char at a certain point


Изменено скрипку (протестировано в IE8): http://jsfiddle.net/cd4Z2/2/

Я только заменил this[i] с this.charAt(i).


В this вопросе, некоторые хорошие причины указывались о том, почему вы предпочли бы использовать charAt в отличие от string[index]. Последнее не является частью ECMAScript 3.

2

IE < 9 не обрабатывают строку, подобную массиву, то есть им не удаётся передать отдельную букву с индексом. Вы можете использовать временный массив (var temp = this.split('');) вместо this[i]

2

Попробуйте это: -

String.prototype.replaceAll = function (removalChar, insertionChar) { 
    var output = ""; 
    var res = this.split(''); 
    for (var i = 0; i < this.length; i++) { 
     if(res[i] == removalChar) { 
      output += insertionChar; 
     } 
     else { 
      output += res[i]; 
     } 
    } 
    return output; 
} 


var test = "Hello-1-2-3"; 
//alert(test.replace("-"," ")); 
alert(test.replaceAll("-"," ")); 
Смежные вопросы