Есть задача — заставить работать такой кусок кода:
Код:
|
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);
}
}
После этого требуемый кусок кода работает. Однако, для начала, мне не нравится дикое дублирование кода. Хочется свернуть две конструкции в одну, но я путаюсь с тем, как передавать параметры туда-сюда.
Затем, я предполагаю, что моё решение может оказаться в принципе неграмотным и непрофессиональным, а настоящие специалисты решали бы эту задачу как-нибудь совсем по-другому.
Помогите разобраться, пожалуйста.