2012-06-03 11 views
10

na zdarzenie „click”, chciałbym uzyskać indeks elementu, który może znajdować się w wielu pojemniku. Zwrócone położenie indeksu powinno być obliczone w stosunku do jego kontenera, a nie do znacznika body.Zdobądź indeks jquery z tej samej klasy elementów wewnątrz różnych pojemników

pisałem przykład tutaj: http://jsfiddle.net/zUGcK/

Moim problemem jest to, że po kliknięciu na liniach w drugim pojemniku bloku, indeks linia zwrócone są: 3, 4, 5 natomiast chciałbym 0, 1, 2 do zwrotu.

Co należy zmienić w indeksie jquery (argumenty), aby uzyskać 0, 1, 2 zwracane dla każdej linii w obu pojemnikach?

Dzięki

http://jsfiddle.net/zUGcK/

$('.line').click(function() 
{ 
    alert('index: '+$(this).index('.container .line')); 
}); 

<div class="container"> 
<div class="header">block #1</div> 
<div class="line">line #0</div> 
<div class="line">line #1</div> 
<div class="line">line #2</div> 
</div> 

<div class="container"> 
<div class="header">block #2</div> 
<div class="line">line #0 (index 3 returned instead of 0)</div> 
<div class="line">line #1 (index 4 returned instead of 1)</div> 
<div class="line">line #2 (index 5 returned instead of 2)</div> 
</div> 

Odpowiedz

17

Można to wykorzystać, aby uzyskać wartość indeksu dla elementów wewnątrz to pojemnik

$(function() 
{ 
    $('.line').click(function() 
    { 
     //alert('index: '+$(this).index('.container .line')); 

     alert($(this).closest('.container').find('.line').index(this)); 
    }); 
}); 

Musisz użyć tej składni $.index

.index(element) 
element The DOM element or first element within the jQuery object to look for. 
​ 

Working Fiddle

+0

Co jeśli linia jest również blok wewnątrz bloku line-kontenera? Czy możesz zajrzeć tutaj: http://jsfiddle.net/zUGcK/32/ W tym przypadku zwracany indeks jest zawsze -1 (indeks elementów nie został znaleziony, ale nie widzę, co robię źle) . Próbuję uzyskać indeks dla kontenera z przyciskami (linia jest przyciskiem, a kontener liniowy jest kontenerem przycisku). Wielkie dzięki za Twoją pomoc. – Vincent

+0

http://jsfiddle.net/zUGcK/22/, to jest to samo skrzypce co w pytaniu. zaktualizowałeś to? –

+0

Następnie użyć tego http://jsfiddle.net/joycse06/zUGcK/35/ –

0

Zaktualizowany indeks z $ this.

$('.line').click(function() 
{ 
    var $this=$(this); 
    var indx= $this.parent('.container').find('.line').index($this); 

    alert('index: '+indx); 
}); 
+1

Nie, '$ (this) .index()' wygląda na wszystkie rodzeństwo, więc zawiera 'div.header', a skończysz z indeksem wyłączonym o jeden. –

+0

Dzięki @muistooshort za korektę. Zaktualizowałem odpowiedź. –

Powiązane problemy