jQuery.show()的问题

时间:2012-06-27 18:30:48

标签: jquery

我正在尝试使用jQuery创建非常简单的图像浏览器。我这样做只是为了学习,目前不会在任何项目中使用。

我的图片和缩略图如下:

<div class="images">
  <img src="http://www.dummyimage.com/400x200/222/fff.jpg" alt="" data-idi="1"/>
  <img src="http://www.dummyimage.com/400x200/534/fff.jpg" alt="" data-idi="2"/>
  <img src="http://www.dummyimage.com/400x200/345/fff.jpg" alt="" data-idi="3"/>
  <img src="http://www.dummyimage.com/400x200/fed/111.jpg" alt="" data-idi="4"/>
</div>

<div class="thumbs">
  <button data-idb="1"><img src="http://www.dummyimage.com/50x50/222/fff.jpg" alt="" /></button>
  <button data-idb="2"><img src="http://www.dummyimage.com/50x50/534/fff.jpg" alt="" /></button>
  <button data-idb="3"><img src="http://www.dummyimage.com/50x50/345/fff.jpg" alt="" /></button>
  <button data-idb="4"><img src="http://www.dummyimage.com/50x50/fed/111.jpg" alt="" /></button>   
</div>

将鼠标悬停在缩略图上会替换上面的主图像。

我设法用一个,我们称之为“设置”图像,如jsfiddle.net所示。

以下是用于实现此目的的简单脚本:

  $('#images img').hide().first().show();
  $('#thumbs button').on( "mouseover", function(e) {
     var idb = $(this).data("idb");
     $('#images img').hide();
     var img = $('#images').find("[data-idi='" + idb + "']").show();
  });

现在我想添加另一组图像,并用.each()函数包装脚本。但是当我试图只显示第一张图片时,我在开始时遇到了问题:

var imgs = $('.images').hide();
$.each(imgs, function( index, val ) {
    var firstImage = $(this).children(":first");
    console.log(firstImage);
    firstImage.show();
});

正在安抚正确的图像,但它没有显示,例外。 jsfiddle.net上的实例。你能帮我解决这个问题吗? TIA

4 个答案:

答案 0 :(得分:1)

您已隐藏了父.images元素。

调用.show()后,隐藏的父级内部会显示一个可见元素。

您需要通过撰写<img>来选择$('.images img')元素。

答案 1 :(得分:1)

隐藏所有图像,然后显示第一个:

$('.images img').hide().first().show()

答案 2 :(得分:1)

看看http://jsfiddle.net/hsuc8/14/

我更改了一些代码。

编辑:我更改了以前的URL,因为我更改了代码以使用过滤功能。

答案 3 :(得分:1)

感谢所有人的回答,我对他们全部投了赞成票。我设法改进了我的脚本,现在HTML结构如下所示:

<div class="images" data-set='1'>
  <img src="http://lorempixel.com/400/200/sports/1/" alt="" data-idi="a1" />
  <img src="http://lorempixel.com/400/200/sports/2/" alt="" data-idi="a2" />
  <img src="http://lorempixel.com/400/200/sports/3/" alt="" data-idi="a3" />
  <img src="http://lorempixel.com/400/200/sports/4/" alt="" data-idi="a4" />
</div>
<div class="thumbs" data-set="1">
  <button data-idb="a1"><img src="http://lorempixel.com/50/50/sports/1/" alt="" /></button>
  <button data-idb="a2"><img src="http://lorempixel.com/50/50/sports/2/" alt="" /></button>
  <button data-idb="a3"><img src="http://lorempixel.com/50/50/sports/3/" alt="" /></button>
  <button data-idb="a4"><img src="http://lorempixel.com/50/50/sports/4/" alt="" /></button>   
</div> 

JS脚本如下所示:

    var imgs = $('.images');
    $('.images img').hide()
    $.each(imgs, function(index, val) {
        $(val).children(":first").show();
        $('.thumbs button').on( "mouseenter", function(e) {
             var idb = $(this).data("idb"),
                 set = $(this).parent().data("set");
             $('body').find("[data-set='" + set + "']").children("img").hide();
             var img = $('.images').find("[data-idi='" + idb + "']").show();
        });
    });

working example