Comment savoir si un numéro de ligne est cliqué dans une table?
J'ai un tableau comme le suivant:
HTML:
<table>
<tr>
<td>1</td><td>1</td><td>1</td>
</tr>
<tr>
<td>2</td><td>2</td><td>2</td>
</tr>
<tr>
<td>3</td><td>3</td><td>3</td>
</tr>
</table>
Lorsqu'un utilisateur clique sur la table, comment puis-je obtenir l'index de cette ligne (tr
élément)?
Par exemple, quand je clique sur le premier tr
(avec 1
s dans le tableau ci-dessus), il doit le ramasser et de le retourner 1
.
Vous devez vous connecter pour publier un commentaire.
Ce serait que vous obtenez l'indice de l'cliqué ligne, en commençant avec un:
JS:
HTML:
Si vous souhaitez retourner le nombre stockées dans la première cellule de chaque ligne:
on
maintenant:$('#thetable tr').on('click', function () {...})
. Et peut-être certains ou de la totalité de la table est chargé dynamiquement, dans ce cas, vous pourriez essayer de liaison à un élément que vous connaissez est présent lorsque le DOM est prêt, commedocument
:$(document).on('click', '#thetable tr', function () {...})
.Une meilleure approche serait de déléguer l'événement, ce qui signifie l'attraper comme des bulles pour le nœud parent.
délégation - vue d'ensemble
Cette solution est à la fois plus robuste et plus efficace.
Il permet à l'événement pour être traités, même si plusieurs lignes sont ajoutées dynamiquement à la table plus tard, et aussi les résultats dans la fixation d'un seul gestionnaire d'événements pour le nœud parent (
table
élément), au lieu d'un pour chaque nœud enfant (tr
élément).En supposant que l'OP de l'exemple est une version simplifiée, la structure de la table peut être plus complexe, par exemple:
Par conséquent, une approche simpliste comme l'obtention d'
e.target.parentElement
ne fonctionne pas, cliquer sur l'interne<p>
et en cliquant sur le centre de<td>
va produire des résultats différents.À l'aide de délégation normalise la gestion des événements, seulement en supposant qu'il n'y a pas de tables imbriquées.
mise en œuvre
Les deux extraits suivants sont équivalents:
Qu'ils attachent à un auditeur de
table
élément et gérer n'importe quel événement que les bulles se forment dans les lignes de la table. L'API actuelle est laon
méthode et ladelegate
méthode est l'héritage de l'API (et en fait les appelson
derrière les scènes).Noter que l'ordre des paramètres pour les deux fonctions sont différentes.
exemple
Une comparaison entre l'effet direct de gestionnaire de l'attachement et de la délégation sont disponibles ci-dessous ou sur jsFiddle:
JS:
CSS:
HTML:
Voici la démo sur jsFiddle.
P. S:
Si vous avez des tables imbriquées (ou, dans le cas général, souhaitent déléguer à des éléments spécifiques de la profondeur), vous pouvez utiliser cette suggestion de l'jQuery rapport de bug.
Vous pouvez utiliser
object.rowIndex
les biens qui ont un indice commençant à 0.Voir un travail démo
Simple et jQuery gratuit solution:
Bonus: Il fonctionne même si des lignes sont ajoutées/supprimées de façon dynamique
Pour la première
tr
, il alerte 0. Si vous voulez alerte 1, vous pouvez ajouter 1 à l'index.Dans certains cas, nous pourrions avoir un couple de tables, et puis nous avons besoin de détecter cliquez pour table en particulier. Ma solution est: est-ce
DÉMO