如何在jQuery中编写这个JavaScript迭代函数?

时间:2015-09-30 15:46:58

标签: javascript jquery html css

我有一个JS函数,它返回一个“.youtube”元素列表,循环选择器,并调用另一个函数。 JavaScript函数工作得很漂亮,但我想把它翻译成jQuery。这是JS函数,它可以正常工作:

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/

2 个答案:

答案 0 :(得分:5)

jQuery中不需要索引 each() youtube指的是元素

  

.each()方法旨在使DOM循环结构简洁且不易出错。调用时,它会迭代属于jQuery对象的DOM元素。每次回调运行时,都会从0开始传递当前循环迭代。更重要的是,回调是在当前DOM元素的上下文中触发的,因此关键字this指的是元素。 (摘自https://api.jquery.com/each/

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

答案 1 :(得分:3)

你也可以这样做:

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

...提供getVideos只查看它的第一个参数而不是后续参数,因为它将使用三个参数调用:元素,它的索引和我们循环的数组(其中是.get()给我们的真正的JavaScript数组。

或者更少的jQuery&#34;方式:

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

我应该注意forEach是ES5 +(例如,大约2009年),因此IE8没有它,因为IE8是在ES5规范最终确定之前发布的。所有现代浏览器都可以。