Показать сообщение отдельно
  #1 (permalink)  
Старый 13.11.2011, 23:43
Новичок на форуме
Посмотреть профиль Найти все сообщения от ­­­
 
Регистрация: 13.11.2011
Сообщений: 3

Помогите прикрутить forEach к HTMLCollection и NodeList
Есть задача — заставить работать такой кусок кода:

Код:
var elements = document.getElementsByTagName(someName);
elements.forEach(someFunction);
Достаточно решения в современных браузерах, где поддерживается «родной» forEach для обычных массивов. Кроме того, нужно решение на чистом JavaScript + DOM, без jQuery и других библиотек.

Я нашёл весьма кривое и топорное решение задачи. Надеюсь, что здесь мне подскажут более прямое.

Вот что я сделал:

// Это для IE и Firefox:

if (HTMLCollection.prototype.forEach === undefined) {
  HTMLCollection.prototype.forEach = function(callback, thisObj) {
    Array.prototype.forEach.call(this, callback, thisObj);
  }
}

// Это для Chrome:

if (NodeList.prototype.forEach === undefined) {
  NodeList.prototype.forEach = function(callback, thisObj) {
    Array.prototype.forEach.call(this, callback, thisObj);
  }
}


После этого требуемый кусок кода работает. Однако, для начала, мне не нравится дикое дублирование кода. Хочется свернуть две конструкции в одну, но я путаюсь с тем, как передавать параметры туда-сюда.

Затем, я предполагаю, что моё решение может оказаться в принципе неграмотным и непрофессиональным, а настоящие специалисты решали бы эту задачу как-нибудь совсем по-другому.

Помогите разобраться, пожалуйста.
Ответить с цитированием