在我的jQuery中为什么indexOf没有从我的数组中找到键?

时间:2013-04-20 16:44:52

标签: javascript jquery html arrays indexof

我一直在努力让它发挥作用,但似乎没有任何帮助。

所以我在图片阵列中都有两张图片。 我想要做的是当你点击下一张图片时,会出现一张。 我很确定问题是indexOf,因为它每次都返回-1。

如果我换行:

pictures[listIndex+1].show("drop", {direction: "up"}, 1000);< ---不起作用。

行:

pictures[1].show("drop", {direction: "up"}, 1000);< ---它有效,但不是很有用。

我希望你明白我的问题是什么,抱歉我的英语不好。我非常感谢你的帮助。

$(document).ready(function(){
    var pictures = [$("#link"), $("#italy1")];
    pictures[1].hide();
    $("#link").click(function(){
        var listIndex = pictures.indexOf($(this));
        pictures[listIndex+1].show("drop", {direction: "up"}, 1000);
    });
    $("#italy1").click(function(){
        $(this).hide("drop", {direction: "up"}, 1000);
});
});

4 个答案:

答案 0 :(得分:2)

那是因为你在jQuery对象中包装元素。即使两个jQuery对象包含相同的元素,它们仍然是两个独立的对象,因此indexOf方法无法通过查找另一个来找到它们。

将元素本身放在数组中:

var pictures = [$("#link").get(0), $("#italy1").get(0)];

现在您可以使用元素引用来查找数组中的元素。使用$.inArray方法,因为它也适用于没有Array.indexOf方法的浏览器:

var listIndex = $.inArray(this, pictures);

当然,当你从数组中获取元素时,需要将它包装在jQuery对象中以使用jQuery方法:

$(pictures[listIndex+1]).show("drop", {direction: "up"}, 1000);

答案 1 :(得分:0)

也许jQuery.inArray可以解决问题。

答案 2 :(得分:0)

如果您想选择下一个$("#link"),可以随时使用 $(this).next("#link")

答案 3 :(得分:0)

支持Guffa,类似FIDDLE

$(document).ready(function(){
    var pictures = [$("#link").get(0), $("#italy1").get(0)];

    $(pictures[1]).hide();

    $("#link").on('click', function(){
        var listIndex = $.inArray(this, pictures);
        $(pictures[listIndex+1]).show("drop", {direction: "up"}, 1000);
    });

    $("#italy1").on('click', function(){
        $(this).hide("drop", {direction: "up"}, 1000);
    });
});