2015-09-30 5 views
3

У меня есть функция JS, которая возвращает список элементов «.youtube», петли через селектор и вызывает другую функцию. Функция JavaScript работает красиво, но я хочу перевести ее в jQuery. Вот функция JS, которая работает правильно:Как я могу написать эту функцию итерации JavaScript в jQuery?

var videos = document.querySelectorAll(".youtube"); 
for (var i = 0; i < videos.length; i++) { 
    getVideos(videos[i]); 
} 

Теперь вот моя попытка перевода его в JQuery:

$(".youtube").each(function(i, youtube){ 
    getVideos(youtube[i]); 
}); 

Это не работает. Вот JSFiddle: http://jsfiddle.net/k3y3yvxq/2/

ответ

5

Нет необходимости индекса в JQuery each(), youtube относится к элементу

Метод .each() предназначен, чтобы сделать DOM зацикливания конструкции кратким и менее подвержены ошибкам. Когда он называется, он выполняет итерацию над элементами DOM, которые являются частью объекта jQuery. Каждый раз, когда обратный вызов запускается, ему передается текущая итерация цикла, начиная с 0. Более того, обратный вызов запускается в контексте текущего элемента DOM, поэтому ключевое слово this относится к элементу. (Из https://api.jquery.com/each/)

$(".youtube").each(function(i, youtube){ 
    getVideos(youtube); 
    // or getVideos(this); 
}); 
+0

Duh. Теперь я чувствую себя глупо. Я соглашусь, когда таймер закончится. – ImmaGrumpyOldMan

3

Вы также можете сделать это следующим образом:

$(".youtube").get().forEach(getVideos); 

... при условии, getVideos смотрит только на первом аргументе, а не последующие, как он будет вызван с тремя аргументами: Элемент, его индекс и массив, который мы зацикливаем (это то, что дает нам .get(), настоящий массив JavaScript).

Или "меньше JQuery" путь:

Array.prototype.forEach.call(document.querySelectorAll(".youtube"), getVideos); 

Я хотел бы отметить, что forEach является ES5 + (например, около 2009 г.), так что IE8 не имеет его, как и IE8 был выпущен до Спецификация ES5 была завершена. Все современные браузеры делают.

+1

Это очень элегантное решение, спасибо за ваш вклад. – ImmaGrumpyOldMan

Смежные вопросы