2013-08-14 2 views
1

Мне нужно найти индекс элемента среди других элементов, соответствующих данному селектору. Я не могу просто использовать .index() без аргументов, мне нужно игнорировать несколько «чужих» элементов.jQuery .index среди коллекции объектов

$('body').delegate('.TabHeader', 'click', function() { 

    var $this = $(this), 
     // All tab headers. 
     $headers = $this.parent().children('.TabHeader'), 
     // All tab contents. 
     $contents = $this.parent().siblings('.TabContent'), 
     // New active tab position. 
     // PROBLEM HERE, i would like to do that, but jQuery doesn't handle it: 
     index = $this.index($headers), 
     // New active tab header. 
     $newActiveHeader = $headers.eq(index), 
     // New active tab content. 
     $newActiveContent = $contents.eq(index); 

    // Hidding all other tabs. 
    $headers.not($newActiveHeader).removeClass('Active'); 
    $contents.not($newActiveContent).removeClass('Active').addClass('Hidden'); 

    // Showing new active tab. 
    $newActiveHeader.addClass('Active'); 
    $newActiveContent.addClass('Active').removeClass('Hidden'); 

}); 

С HTML код такого рода:

<div> 
    <ul> 
     <li class="TabHeader Active">Tab 0</li> 
     <li class="TabHeader">Tab 1</li> 
     <li class="TabHeader">Tab 2</li> 
     <!-- There can be foreign elements mixed with <li> elements --> 
    </ul> 
    <div class="TabContent Active"> 
     Content 0 
    </div> 
    <div class="TabContent Hidden"> 
     Content 1 
    </div> 
    <div class="TabContent Hidden"> 
     Content 2 
    </div> 
    <!-- There can be foreign elements mixed with <div> elements --> 
</div> 

(Вкладки генерируются динамически, так что я использую .delegate(), если это имеет значение)

Есть четкий путь получить индекс элемента среди сопоставленного набора элементов, а не только среди детей родителя?

ответ

2

JQuery индексный метод возвращает индекс прошедшего элемента в коллекции:

// Assuming `this` refers to a `.TabHeader` element 
var i = $('.TabHeader').index(this); 
+1

Благодарим за помощь! Я просто вычислил это: 'index = $ headers.index ($ this),' – Virus721

0
$this.index(); // you don't have to refer to it's parent or siblings! 

Это будет делать.

example

Смежные вопросы