使用jquery在列表中修改第n个li

时间:2010-07-14 14:09:49

标签: javascript jquery loops

我正在尝试一些非常基本的东西,但我无法弄清楚为什么这不起作用。 我可以使用[i]获取有关该对象的信息,但我无法以这种方式更改数据?

    // Make all the li's invisible
$('div#rotator ul li').css({opacity: 0.0});

// Calculate a random number between 1 and 3
var randnr = Math.floor((1-4)*Math.random()) + 4;

for(var i = 0; i < $('#rotator ul li').length; i++) {

            // Make the i element appear
    $('#rotator ul li')[i].css({opacity: 1.0});
}

2 个答案:

答案 0 :(得分:5)

jQuery对象是类似于数组的对象,可以用作原始DOM元素的数组 因此,$(...)[i]获取第i个原始DOM元素,而不是包含它的jQuery对象。

要获取包含第i个元素的jQuery对象,请调用.eq() method,如下所示:

$('#rotator ul li').eq(i).css({opacity: 1.0});

您还可以使用:eq selector

$('#rotator ul li:eq(i)').css({opacity: 1.0});

但是,根本不需要循环;你可以一次隐藏所有元素:

$('div#rotator ul li').css({opacity: 1.0});

答案 1 :(得分:1)

您遇到此问题,因为当您使用数组索引时,您将获得一个DOM元素,而css()是一个jQuery对象上的方法。所以你可以这样做:

$($("#rotator ul li")[i]).css("opacity", 1.0);

当然这很尴尬所以你可以使用eq()

$("#rotator ul li").eq(i).css("opacity", 1.0);

但是你正在对集合中的所有元素进行更改,因此比循环更简单的解决方案就是:

$("#rotator ul li").css("opacity", 1.0);

这会将CSS应用于jQuery对象中的所有元素。