我正在尝试提取图像以在li元素上显示为背景图像。
li的确切数目是不确定的,但是我的代码在处理此问题方面效率不高,因为我不得不手动将其写入。我不确定最好的遍历此方法的方式,以便在更多情况下不需要手动处理李的被添加。
$('.carousel').each(function(){
var i = 0;
$(this).find("li").each(function(){
i++;
$(this).addClass('thumbnail'+i);
});
$(this).find("li.thumbnail1").css('background-image', 'url(' + $(this).find('.item:nth-child(1) img').attr('src') + ')');
$(this).find("li.thumbnail2").css('background-image', 'url(' + $(this).find('.item:nth-child(2) img').attr('src') + ')');
$(this).find("li.thumbnail3").css('background-image', 'url(' + $(this).find('.item:nth-child(3) img').attr('src') + ')');
$(this).find("li.thumbnail4").css('background-image', 'url(' + $(this).find('.item:nth-child(4) img').attr('src') + ')');
$(this).find("li.thumbnail5").css('background-image', 'url(' + $(this).find('.item:nth-child(5) img').attr('src') + ')');
});
答案 0 :(得分:1)
var that = this;
$(this).find("li").each(function(index){
var imgSrc = $(that).find('.item:nth-child(' + (index+1) + ') img').attr('src');
$(this).css('background-image', 'url(' + imgSrc + ')');
});
我认为这比您正在做的事情更有意义。 jQuery .each函数将Index作为第一个参数,因此如果需要,您可以找到具有相同索引的匹配.item
答案 1 :(得分:0)
使用$ .each()函数时,可以向其传递一些参数。例如:
$(this).find("li").each(function(i, o){ });
其中 i 是索引,而 o 是对象本身(在您的情况下为 li 元素)。 因此,您可以尝试执行以下操作:
$(this).find("li.thumbnail" + i).css('background-image', 'url(' + $(this).find('.item:nth-child('+ (i - 1) + ') img').attr('src') + ')');
答案 2 :(得分:0)
像这样重写它会更有效率。
each()
存储轮播的范围li
使您可以在each()
的{{1}}范围内与其进行交互。无需声明单独的i
变量,因为在调用each()
时传递给函数的第一个参数是当前项的索引。