使用JQuery更改元素的顺序

时间:2012-02-11 20:50:56

标签: jquery jquery-selectors

有人知道我做错了什么吗?我试图改变某些图像显示的顺序,我希望每次按下按钮时图像都会向右/左移动一个点。这就是我尝试但没有运气。

真正感谢任何帮助或见解

$("#rightShift").click(function(){
    $("img").hide();
    var count = $("img").size();
    $("img").each(function(i) { 
        var indexImg = count - i;
        $("img:eq(indexImg)").show();
    });
}); 
$("#leftShift").click(function(){
    $("img").hide();
    $("img:last").prependTo("img");
    $("img").show();
});

3 个答案:

答案 0 :(得分:20)

假设你希望这个像旋转木马那样工作(当你向右移动时,最后一张图像成为第一张图像),那么我就是这样做的:

$("#rightShift").click(function(){
    $("img:last").detach().insertBefore("img:first");
});

$("#leftShift").click(function(){
    $("img:first").detach().insertAfter("img:last");
});

答案 1 :(得分:4)

您正在尝试引用字符串中的变量。这毫无意义。
你的意思是:

$("img:eq(" + indexImg + ")").show();

但更有效的实施是:

$(this).prev().show();

没有副作用的最有效的实施是:

$("#rightShift").click(function(){
    var $images = $("img"); // <-- Reference to all images
    $images.hide();
    //var count = $images.length; //<-- Unused variable, delete it?
    $images.each(function(i) { 
        $(this).prev().show();
    });
}); 
$("#leftShift").click(function() {
    var $images = $("img");
    $images.hide();
    $images.last().prependTo("img"); // OR: $images.before($images.last());
    $images.show();
});

答案 2 :(得分:1)

此:

$("img:eq(indexImg)").show();

应该是这样的:

$("img:eq(" + indexImg + ")").show();

不确定其他东西是不是错了。