Возникли сомнения по поводу реализации такого кода:
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: