jQuery addClass()到ul:nth-​​child?

时间:2012-02-09 19:39:38

标签: javascript jquery addclass css-selectors

我无法使用以下代码添加class():

    var width = $('.pane').width();
    var column_index = $('#home-container div ul.hub').index('#home-container div ul');
    var column_counter = column_index + 1;

    $('#home-container div ul:nth-child(' + column_counter + ')').next().addClass('hub');

    $('#home-container').animate({"left": -width*column_counter}, 300);

这是EXAMPLE

谢谢!

3 个答案:

答案 0 :(得分:2)

问题分为三部分(主要与您使用index()相关)。

首先,index()接受元素$('#el'),而不接受选择器'#el' ...

其次,你说,“获取所有<ul class="hub">,然后告诉我第一个<ul>的索引是什么......好吧,那将永远是1。

您的意思是,获取所有<ul>然后显示<ul class="hub">的索引。

短版?用这个替换你的第二行...

var column_index = $('#home-container div ul').index( $('#home-container div ul.hub') );

...但是,要使其余代码正常工作,您需要从前一个元素中删除class="hub",然后将其添加到当前元素中。所以用这些替换你的第四行......

$('#home-container > div:nth-child(' + column_counter + ') > ul').removeClass('hub');
$('#home-container > div:nth-child(' + (column_counter+1) + ') > ul').addClass('hub');

...甚至更容易,用这个替换你的整个代码集......

var width = $('.pane').width();
var column_index = $('#home-container div ul').index( $('#home-container div ul.hub') );
var column_counter = column_index + 1;

$('#home-container > div:nth-child(' + column_counter + ') > ul').removeClass('hub');
$('#home-container > div:nth-child(' + (column_counter+1) + ') > ul').addClass('hub');

$('#home-container').animate({"left": -width*column_counter}, 300);

刚刚在您的网站上对此进行了测试,因此它应该适合您。

答案 1 :(得分:0)

var column_index = $('#home-container div ul.hub').index('#home-container div ul'); 需要是var column_index = $('#home-container > div > ul.hub').index('#home-container > div > ul');

与其他人一样。如果某事物的某个孩子表明作为选择器使用大于符号“&gt;”

答案 2 :(得分:0)

next()方法获得匹配元素集中每个元素的紧随其后的兄弟。如果提供了选择器,则仅当它与该选择器匹配时,它才会检索下一个兄弟。

在你的情况下,$('#home-container div ul:nth-child(' + column_counter + ')').next()将导致一个空集,因为你没有选择这个ul的兄弟。在这种情况下,nth-child选择器也无法帮助您。试试这个。

var width = $('.pane').width();
var column_index = $('#home-container div ul.hub')
                   .index('#home-container div ul');
var column_counter = column_index + 1;

$('#home-container div ul').eq(column_counter).addClass('hub');