使用jQuery将类附加到每个第3个克隆列表项

时间:2011-05-03 20:40:37

标签: jquery

正如标题所说,我正在尝试将类.third附加到每个第3个克隆列表元素。我有一切工作 here on JSFiddle ,除了缺少添加类的代码。这是当前的代码:

HTML

<ul><li>some text</li></ul>

JS

$('li').live('click', function() {
    $(this).clone().appendTo('ul');
});

CSS

li:hover {
  cursor:pointer;
  text-decoration:underline;  
}

.third {
  color: #f00;
}

一开始只有一个列表项,但是,例如,在我对任何列表项单击5次后,我希望html看起来像这样:

<ul>
  <li>some text</li>
  <li>some text</li>
  <li class="third">some text</li>
  <li>some text</li>
  <li>some text</li>
  <li class="third">some text</li>
</ul>

任何帮助将不胜感激。谢谢!

5 个答案:

答案 0 :(得分:3)

查看:nth-child()选择器(source)。你会想要使用像

这样的东西
$('ul li:nth-child(3n)').addClass('third');

Here is a fully working Demo

答案 1 :(得分:2)

试试这个:

$('li').live('click', function() {
    $(this).clone().appendTo('ul');
    $('ul li').removeClass("my-class");
    $('ul li:nth-child(3n)').addClass("my-class");
});

答案 2 :(得分:1)

有关示例,请参阅jQuery nth-child documentation

$('li:nth-child(3n)').addClass('third');

答案 3 :(得分:1)

$('li').live('click', function() {
    $(this).clone().removeClass('third').appendTo('ul')
        .addClass($('ul').children().length % 3 == 0 ? 'third' : '');
});

这个和其他答案的区别在于它不会重新遍历子节点。它在添加时将类应用于项目,因此产生的开销较小(但最小)。

答案 4 :(得分:1)

nth-child(3)可能有点慢(请参阅jsPerf test =&gt;慢50%)。您可以考虑使用index()

$('li').live('click', function() {
  var $clone = $(this).clone().appendTo('ul');
  $clone.toggleClass('third', $clone.index() % 3 == 2);
});