2012-02-21 5 views
3
<nav> 
    <section> 
     <aside> 
    <div class="findthis">111111</div> 
    <div class="findthis">222222</div> 
    <div class="findthis">333333</div> 
    <div class="findthis">444444</div> 
     </aside> 
    </section> 
</nav> 


$('.findthis').each(function(){ 
     var index = $(this).index()+1; 
     $(this).append(" (this element = "+index+")") 
}); 

это работает! (http://jsfiddle.net/3c5TZ/)Как найти абсолютный индекс() с помощью jQuery?

но .... когда я делаю/вставить несколько HTML-теги, как это ...

<nav> 
    <section> 
     <aside> 
    <div class="findthis">111111</div> 
      <h2><h2> 
    <div class="findthis">222222</div> 
      <span></span> 
    <div class="findthis">333333</div> 
      <b></b>       
    <div class="findthis">444444</div> 
     </aside> 
    </section> 
</nav> 

он терпит неудачу! (http://jsfiddle.net/3c5TZ/1/)

Любые идеи?

+1

Так что индекс значения вы ожидаете во втором случае? – musefan

+0

@amnotiam это связано с незакрытым элементом 'h2' .. –

ответ

4

Обратитесь к documentation of index(). В вашем примере jQuery не может действительно знать, какой индекс вы ищете, относительно чего?

Один из способов сделать это является обеспечение выбора для .index():

$('.findthis').each(function(){ 
     var index = $(this).index('.findthis')+1; 
     $(this).append(" (this element = "+index+")") 
}); 

jsFiddle Demo

Другой (в этом случае может быть более эффективным) способом является запуск index() на всей коллекции, и передать элемент в качестве параметра:

var $collection = $('.findthis'); 
$collection.each(function(){ 
     var index = $collection.index(this)+1; 
     $(this).append(" (this element = "+index+")") 
}); 

jsFiddle Demo

+0

Oh !!!!!!! так что только это .... PS: так спасибо моей неудаче! – l2aelba

1

использовать .index('.findthis'), чтобы сдержать подсчет только внутри списка .findthis элементов.

демо на http://jsfiddle.net/3c5TZ/5/

также установили недостающую </h2> ошибку

3

Вы случайно вложенные элементы внутри друг друг.

Изменить это:

<h2><h2> 

к этому:

<h2></h2> 

Тогда она работает просто отлично. Демонстрация: http://jsfiddle.net/Guffa/3c5TZ/14/

+0

hahaha, извините, человек – l2aelba

+0

hehehe ... Я тоже этого не видел! –

+0

Хороший улов. Я не уверен, чего хотел бы опера. 1,2,3,4 или 1,3,5,7? – kapa

4

Индекс передается методу .each() вам не придется изобретать велосипед:

$('.findthis').each(function(index){ 
    $(this).append(" (this element = " + (index + 1) + ")") 
}); 

Updated fiddle.

+0

+1 Я не думал о тривиальном решении :). Этот ответ должен быть принят. – kapa

+0

@baz, прямой вопрос о методе '.index()' легко пропустить, он внутри '.каждый() '. –

-1
$('.findthis').each(function(i){ 
    $(this).append(" (this element = "+i+")") 
}); 

Попробуйте это ...

+0

Этот ответ уже опубликован. – kapa