考虑以下代码:
'use strict';
$.getJSON('/img/content/galleries/', function(directories) {
$("#gallery").text("");
for (var dirnum = 2; dirnum < directories.length - 1; dirnum++) {
(function(dirnum) {
var folder = '/img/content/galleries/' + directories[dirnum] + '/';
$.ajax({
url: folder,
success: function(data) {
$(data).find("a").attr("href", function(i, val) {
if (val.match(/\.jpg|\.png|\.gif/)) {
$("#gallery").append('<a class="fancybox-thumb" href="' + folder + val + '" rel="fancybox-thumb"><div class="gallerypictures" style="background-image:url(' + folder + val + ')"></div></a>');
} // end val.match
}); // end data.find
} // end success
}); // end ajax
})(dirnum); // end closure
} // end for loop
}); // end getJSON
它所做的只是检索"galleries“文件夹的子目录,然后通过ajax调用获取文件名,并将每个子目录(例如gallery1和gallery2 )的内容按字母顺序输出到#gallery div。
这段代码按原样运行良好,并正确输出所有文件。下面是我所遗漏的:
我希望每个子目录以不同于其他子目录的方式处理第一个图像(我只想为每个子目录的第一个图像添加一个类)。
我是ajax行业的新手,所以我对如何过滤每个子目录的第一个图像感到有点困惑。或者,也许有一种更简单的方式来思考这一点?
提前感谢!
埃里克·P。
发布于 2016-01-27 01:45:54
在find函数的回调中使用if语句,如下所示:
$(data).find("a").attr("href", function(i, val) {
if(i === 0){
// whatever you want to do to first element in here
} // end val.match
});
发布于 2016-01-27 02:08:49
尝试在for
循环中添加变量i
,将i
传递给IIFE,使用if
条件检查i
是否等于0
for (var dirnum = 2, i = 0; dirnum < directories.length - 1; dirnum++, i++) {
(function(dirnum, i) {
var folder = '/img/content/galleries/' + directories[dirnum] + '/';
$.ajax({
url: folder,
success: function(data) {
$(data).find("a").attr("href", function(_, val) {
if (val.match(/\.jpg|\.png|\.gif/)) {
if (i === 0) {
// do stuff
}
$("#gallery").append('<a class="fancybox-thumb" href="' + folder + val + '" rel="fancybox-thumb"><div class="gallerypictures" style="background-image:url(' + folder + val + ')"></div></a>');
}
// end val.match
});
// end data.find
}// end success
});
// end ajax
})(dirnum, i);
// end closure
}
https://stackoverflow.com/questions/35027349
复制相似问题