jQuery集中的每个第n个元素

时间:2012-08-19 10:50:34

标签: jquery

我想在jQuery元素集中选择每一个。

例如

<ul>
  <li>A</li>
  <li>B</li>
  <li>C</li>
  <li>D</li>
  <li>E</li>
  <li>F</li>
  <li>G</li>
</ul>
  1. 如何选择每个第三个(C和F)元素?
  2. 如何选择同一组中不是每三个(A,B,D,E,G)的所有其他元素?

3 个答案:

答案 0 :(得分:10)

您可以使用$.grep函数将集合中的每个元素及其索引(基于0)传递给回调函数。因此,您需要决定要保留哪一个:

var elements = $('<ul><li>A</li><li>B</li><li>C</li><li>D</li><li>E</li><li>F</li><li>G</li></ul>').find('li');
var result = $.grep(elements, function(element, index) {
    return (index + 1) % 3 == 0;
});

如果你想要其他元素,只需反转条件:(index + 1) % 3 != 0

另一种可能性是使用.filter()函数:

var result = $('<ul><li>A</li><li>B</li><li>C</li><li>D</li><li>E</li><li>F</li><li>G</li></ul>')
    .find('li')
    .filter(function(index) {
        return (index + 1) % 3 == 0;    
    });

答案 1 :(得分:2)

Working Demo


(1)$('li:nth-child(3n)') - 选择每第三个列表项

http://api.jquery.com/nth-child-selector/

(2)$('li').not(':nth-child(3n)') - 选择其他人

http://api.jquery.com/not/

<小时/> 如果您没有DOM中的元素,但只有问题中指定的字符串,请将这些技术与.children()结合使用:

var thirds = $('<ul><li>A</li>...</ul>').children('li:nth-child(3n)');

var others = $('<ul><li>A</li>...</ul>').children('li').not(':nth-child(3n)');

在这种情况下,.children().find()可以互换使用,因为list-items中没有任何嵌套元素;一般情况下,前者只搜索单个级别,而后者搜索所有后代(如果你知道你只想降低一级,则效率不高)。

答案 2 :(得分:0)

我只是在一般意义上回复,你可以说你的问题定义的扩展(所以它对许多人有用)。

假设您想要选择每个第3个元素,但元素的开头不一定是第3个元素。 如果你想让第一个元素作为开始元素意味着选择应该是A,D,G或者跳过这些元素,请按照

  1. $('li:nth-child(3n - 2)')
  2. $('li').not(':nth-child(3n- 2)')
  3. 这里3个“3n”将选择第3个元素,“ - 2”将选择带到第一个元素。

    以一般形式

    1. $('li:nth-child(3n - x)')
    2. $('li').not(':nth-child(3n- x)')
    3. 这里x是变量来定义ex中详述的第一个元素。上述

      谢谢和问候,
      Rk_Hirpara