Показать сообщение отдельно
  #1 (permalink)  
Старый 21.09.2008, 21:43
Отправить личное сообщение для Octane Посмотреть профиль Найти все сообщения от Octane  
Регистрация: 10.07.2008
Сообщений: 3,873

Хорошо ли так делать?
Возникли сомнения по поводу реализации такого кода:
var core = {
	ie: 0 /*@cc_on + @_jscript_version * 10 % 10 @*/
};

Object.prototype.each = function(fn, arg) {
  for(var key in this) if(this.hasOwnProperty(key)) fn.apply(this[key], arg || []);
  return this;
};

if(!Array.prototype.forEach) Array.prototype.forEach = function(fn, context) {
  var i, length = this.length;
  for(i = 0; i < length; i++) fn.call(context, this[i], i, this);
};

function makeArray(list) {
  var array = [];
  if(!core.ie) array = Array.prototype.slice.call(list);
  else Array.prototype.forEach.call(list, function(el) {
    array.push(el);
  });
  return array;
}

function getElements(tag, node) {
  return /*@cc_on makeArray( @*/ (node || document).getElementsByTagName(tag) /*@cc_on ) @*/;
}

Проблема собственно в том, что описынный метод «each» доступен в нормальных браузерах и для «DOMNodeList», но для IE, чтобы использовать «each» нужно список преобразовать, например, в массив, для этого подходит одна из имеющихся в проекте функций «makeArray». Чтобы не выполнять «makeArray» в нормальных браузерах, заключил его в условные комментарии, только не уверен хорошо ли так делать? :confused:

Последний раз редактировалось Octane, 21.09.2008 в 21:47.
Ответить с цитированием