2012-08-19 45 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

相關問題