Столкнулся с проблемой, в ИЕ5.0 нет некоторых необходимых в обычной жизни методов Array. Ситуация раздражает, решил исправить ситуацию своим кодом. Где то не очень оптимально(splice), но не думаю что в IE6.0 они реализованны лучше  . | Код | /** * Далее идёт проверка существования метода, если такого нет, то создаем */ /** * Снять верхний элемент не изменяя содержимого массива */ if(!Array.prototype.top) Array.prototype.top=function() { return this.length>0? this[this.length-1]: null; }; /** * Добавить новый(е) элемент(ы) в конец массива */ if(!Array.prototype.push) Array.prototype.push=function() { for(var i=0; i<arguments.length; i++) this[this.length]=arguments[i]; return this.length; }; /** * Снять и удалить верхний элемент массива */ if(!Array.prototype.pop) Array.prototype.pop=function() { var ret=this.length>0? this[this.length-1]: null; if(this.length>0) this.length--; return ret; };
/** * Добавить новые и удалить старые элементы массива, очень полезная функция. * from - Индекс, с которого начинается изменение массива. * len - Целое число, обозначающее количество удаляемых старых элементов массива. * Если лен равно 0, никакие элементы не удаляются. В этом случае Вы * должны специфицировать как минимум один новый элемент. * element1 ... elementN - Элементы, добавляемые к массиву. Если Вы не специфицировали * никаких новых элементов, splice только удаляет элементы из массива. */ if(!Array.prototype.splice) Array.prototype.splice=function(from, len) { var left=this.slice(0, from); var right=this.slice(from+len); var rem=this.slice(from, from+len); var add=[]; add.length=arguments.length-2; for(var i=2; i<arguments.length; i++) add[i-2]=arguments[i]; var ret=left.concat(add, right); this.length=0; //delete old items; for(var i=0; i<ret.length; i++) this[i]=ret[i]; return rem; }; /** * Снять элемент с начала массива */ if(!Array.prototype.shift) Array.prototype.shift=function(){ return this.splice(0, 1); }; /** * добавить элемент в начало массива */ if(!Array.prototype.unshift) Array.prototype.unshift=function() { var add=[]; for(var i=0; i<arguments.length; i++) add[i]=arguments[i]; var ret=add.concat(this); for(var i=0; i<ret.length; i++) this[i]=ret[i]; return this.length; }; /** * Получить строку(сорцы) массива, сериализация массива. При евалиировании полученой строки, * получим наш массив обратно. */ if(!Array.prototype.toSource) Array.prototype.toSource=function() { for(var i=0; i<this.length; i++) this[i]=this[i].toString().replace(/(["'\\])/g, "\\$1").replace(/\n/g,"\\n"); return "[\""+this.join("\", \"")+"\"]"; }; |
Ну и конечно пара тестов, работа видна под ИЕ5.0, в других браузерах Array не такой кастрированный. Согласно статистике ИЕ5.0 юзает еще добрые 30% глупого населения нашей планеты. | Код | var a=["test", "bla", "hoi", "wow", "Vingrad"]; alert(a); //исходный массив alert(a.top()); //берем "Vingrad" не изменяя массива alert(a.pop()); //берем "Vingrad" удалив его из массива alert(a); alert(a.shift()); //возьмём "test" alert(a.unshift("begin")); //добавим в начало массива, ИЕ6.0 отстойно отошёл от //спецификации не возвратив новое количество элементов, моя функция делает всё как надо;-) alert(a.push("end")); //добавим в конец массива alert(a); //удалим "bla", "hoi", "wow" и вставим на их место новые элементы alert(a.splice(1, 3, "Privet", "Vsem", "Jeto", "neskol'ko", "novyx", "jelementov")); alert(a); alert(a.toSource()); //получим исходник
|
--------------------
Опыт - сын ошибок трудных © А. С. Пушкин Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik Оценить мои качества можно тут.
|