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

How can I write this JavaScript iteration function in jQuery?

本文关键字:JavaScript 迭代 函数 jQuery      更新时间:2023-09-26

我有一个JS函数,返回的列表"。元素,循环遍历选择器,并调用另一个函数。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/

在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);
});

你也可以这样做:

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

…前提是getVideos只查看它的第一个参数,而不是后面的参数,因为它将被调用三个参数:元素,它的索引和我们正在循环的数组(这是.get()给我们的,一个真正的JavaScript数组)。

或者"less jQuery"方式:

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

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