javascript - 在JS中按类获取父类中的项目数
问题描述
我建立了一个图像库,其中有一个主图像和最多 5 个缩略图。并且可以使用左右按钮循环浏览缩略图并替换主图像,如下所示:
$(".gallery-btn-left").unbind("click").bind("click", function(){
var image_id = $(".gallery-main-image img").attr('data-id');
image_id--;
if(image_id == 0){image_id = $('.gallery-thumbnail img').length;}
var image_url = $(".gallery-thumbnail img[data-id=" + image_id + "]").attr('src');
$(".gallery-main-image img").attr('src', image_url);
$(".gallery-main-image img").attr('data-id', image_id);
});
$(".gallery-btn-right").unbind("click").bind("click", function(){
var image_id = $(".gallery-main-image img").attr('data-id');
image_id++;
if(image_id > $('.gallery-thumbnail img').length){image_id = 1;}
var image_url = $(".gallery-thumbnail img[data-id=" + image_id + "]").attr('src');
$(".gallery-main-image img").attr('src', image_url);
$(".gallery-main-image img").attr('data-id', image_id);
});
这一切都很好,但是,如果我想将两个画廊放在同一页面上,我会遇到一个问题,即我的 JS 正在获取10
而不是或者可能存在预期5
的缩略图(每个画廊最多 5 个) 。$('.gallery-thumbnail img').length
我想知道的是是否有办法获取父画廊中缩略图数量的长度,而不是整个页面上有多少缩略图。
解决方案
多实例最常见的方法是查找容器实例,然后find()
在该实例中使用。
此外,当您多次查找同一个选择器时,最好存储对它的引用,而不是每次需要访问它时都搜索 DOM。它还使代码更易于阅读
就像是:
$(".gallery-btn-left").unbind("click").bind("click", function() {
var $gallery = $(this).closest('.MAIN-GALLERY-CLASSNAME'),
$mainImg = $gallery.find(".gallery-main-image img"),
$thumbs = $gallery.find('.gallery-thumbnail img'),
image_id = $mainImg.attr('data-id');
image_id--;
if (image_id == 0) {
image_id = $thumbs.length;
}
var image_url = $thumbs.filter("[data-id=" + image_id + "]").attr('src');
$mainImg.attr({'src': image_url, 'data-id',image_id});
});
推荐阅读
- javascript - JavaScript:从子对象访问父对象属性
- r - 如何使用转换表量化一列中的字符值?
- python - 创建python wordcloud时如何对多词术语进行分组?
- c# - 如何找到两个字符串类型日期之间的差异?
- tomcat - 如何读取值
在我的 META-INF/context.xml 中定义的条目 - laravel - Laravel Eloquent Save 不保存
- c# - Azure 应用程序解析为与出站 IP 地址中列出的范围完全不同的 IP 地址
- javascript - 为什么我的 div 中的文本字段和按钮对点击没有反应?
- sql - 需要关于 sql server 的帮助
- django - 来自不同模型的 Django 多种表单