2012-02-21 1 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+")") 
}); 

cela fonctionne! (http://jsfiddle.net/3c5TZ/)Comment trouver l'index absolu() avec jQuery?

mais .... quand je fais/insérer plus les balises HTML comme celui-ci ...

<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> 

échoue! (http://jsfiddle.net/3c5TZ/1/)

Des idées?

+1

Alors, que des valeurs des indices que vous attendez dans la deuxième instance? – musefan

+0

@amnotiam cela est dû à l'élément 'h2' non fermé .. –

Répondre

4

Veuillez consulter le documentation of index(). Dans votre exemple, jQuery ne peut pas vraiment savoir quel type d'index vous recherchez, par rapport à quoi?

Une façon de le faire est fournir le sélecteur pour .index():

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

jsFiddle Demo

Un autre (dans ce cas, peut-être plus efficace) moyen est d'exécuter index() sur toute la collection, et passer le élément comme paramètre:

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

jsFiddle Demo

+0

Oh !!!!!!! donc seulement ceci .... PS: alors merci mon échec! – l2aelba

1

utiliser .index('.findthis') pour contraindre le comptage seulement dans la liste des .findthis articles.

démo à http://jsfiddle.net/3c5TZ/5/

a également fixé le </h2> manquant bug

3

Vous avez des éléments accidentellement imbriquées les unes dans les autres.

Modifier ceci:

<h2><h2> 

à ceci:

<h2></h2> 

Ensuite, il fonctionne très bien. Démo: http://jsfiddle.net/Guffa/3c5TZ/14/

+0

hahaha, désolé man – l2aelba

+0

hehehe ... Je n'avais pas vu ça aussi! –

+0

Bonne prise. Je ne suis pas sûr de ce que l'op voulait réaliser. 1,2,3,4 ou 1,3,5,7? – kapa

4

L'indice est passé à la méthode .each() vous n'avez pas de réinventer la roue:

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

Updated fiddle.

+0

+1 Je n'ai pas pensé à la solution triviale :). Cette réponse devrait être acceptée. – kapa

+0

@baz bien, la question directe posée à propos de '.index()' méthode - facile à manquer c'est à l'intérieur '.chacun() '. –

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

Try this ...

+0

Cette réponse a déjà été postée. – kapa

Questions connexes