2012-08-19 92 views
3

我想选择jQuery元素集中的每个第n个元素。jQuery集中的每个第n个元素

例如,

  1. 如何选择在

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

回答

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

Working Demo


(1)$('li:nth-child(3n)') - 如果你没有在DOM元素选择其他

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


- 选择每三个列表项

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

(2)$('li').not(':nth-child(3n)') ,但只在问题中指定的字符串中,将这些技术与.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()可以互换使用,因为您在列表项中没有任何嵌套元素;但一般来说,前者只搜索单个层次,而后者搜索所有后代(如果知道只想降低一层,则效率不高)。

0

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

假设你想选择每个第三个元素,但元素的开始不一定是第三个元素。 如果你想拥有的第一个元素作为开始元素意味着选择应该是A,d,G或跳过这些元素都遵循

  1. $('li:nth-child(3n - 2)')
  2. $('li').not(':nth-child(3n- 2)')

这里3 “3N” 的将选择第三个元素,“ - 2”将选择带到第一个元素。

在广义形式

  1. $('li:nth-child(3n - x)')
  2. $('li').not(':nth-child(3n- x)')

这里x正在变量以限定第一元件如前阐述。以上

感谢和问候,
Rk_Hirpara

相关问题