3 votes

trouver l'indice d'un élément

J'ai du HTML comme ça :

<div class="TopClass">

  <div class="ContentClass">
    <div class="ActionClass">action</div>
  </div> 

  <div class="ContentClass">
    <div class="ActionClass">action</div>
  </div> 

  <div class="ContentClass">
    <div class="ActionClass">action</div>
  </div> 

</div>

Je cherche à obtenir l'index de la classe d'action par rapport à la TopClass ; si l'utilisateur clique sur la deuxième classe d'action, le résultat devrait être 2.

$('.ActionClass').click(function () {
    alert($(this).parent().parent().index());  // not working    
});

6voto

Joy Points 9421

Utilice .index comme ceci qui vous donnera toujours l'indice de .ActionClass même si la structure change. Mais comme .index renvoie à 0-based indice que j'ajoute 1 dans sa sortie :

$('.ActionClass').click(function () {
   alert($(this).closest('.TopClass').find('.ActionClass').index(this) + 1);
});

Violon de travail

Un autre moyen plus court peut être comme ceci, il fonctionne bien avec un seul parent .TopClass jusqu'à présent mais à utiliser avec précaution si vous avez une structure différente. La précédente est plus sûre et fonctionne pour les cas généraux.

$('.ActionClass').click(function () {
   alert($('.ActionClass').index(this) + 1);
});

Violon de travail

2voto

Jack Points 88446

Votre code est presque correct, il suffit de récupérer l'index du nœud parent :

$('.ActionClass').click(function () {
    alert($(this).parent().index());
});

Avis de non-responsabilité

Cela ne fonctionne pas quand il y a d'autres frères et sœurs en plus. .ContentClass . Pour cela, vous devez vous référer à l'article de Joy réponse .

1voto

amelvin Points 6028

Votre parent().parent() vous emmène trop haut dans la structure :

$('.ActionClass').click(function () {
    alert($(this).parent().index());  // not working    
});

Cela fonctionnera, mais comme il s'agit d'une base zéro, vous obtiendrez 0, 1 et 2 pour les trois clics de la division.

http://jsfiddle.net/amelvin/AhReg/

EDITAR

En fonction de votre amendement, vous pouvez utiliser la variable de sélection optionnelle sur la méthode index().

<div class="TopClass">

  <div class="ContentClass">
    <div class="ActionClass">action</div>
  </div> 

  <div class="ContentClass">
    <div class="ActionClass">action</div>
  </div> 

  <div class="test"></div>
  <div class="test"></div>  
  <div class="test"></div>
  <div class="test"></div>  
  <div class="test"></div>
  <div class="test"></div>  

  <div class="ContentClass">
    <div class="ActionClass">action</div>
  </div> 

</div>

$('.ActionClass').click(function () {
    alert($(this).parent().index(".ContentClass"));  // not working    
});

1voto

Josh Koberstein Points 176
$index = jQuery.inArray($(this)[0], $('.ActionClass')) + 1

Cette solution fonctionnera quelle que soit la structure du HTML. Elle trouve l'index du tableau de l'élément '.ActionClass' cliqué dans le tableau contenant tous les éléments '.ActionClass' correspondants.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X