Модераторы: Sardar, Aliance
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Имплементируем недостающие возможности Array, splice, push и подобные в кривом IE5.0 
:(
    Опции темы
Sardar
Дата 21.11.2004, 18:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

Репутация: 78
Всего: 317



Столкнулся с проблемой, в ИЕ5.0 нет некоторых необходимых в обычной жизни методов Array. Ситуация раздражает, решил исправить ситуацию своим кодом. Где то не очень оптимально(splice), но не думаю что в IE6.0 они реализованны лучше smile .
Код
/**
* Далее идёт проверка существования метода, если такого нет, то создаем
*/
/**
* Снять верхний элемент не изменяя содержимого массива
*/
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
 Оценить мои качества можно тут.
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию.
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0412 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.