2408 votes

Comment obtenir les enfants du sélecteur $(this) ?

J'ai une disposition similaire à celle-ci :

<div id="..."><img src="..."></div>

et j'aimerais utiliser un sélecteur jQuery pour sélectionner l'enfant img à l'intérieur de la div sur le clic.

Pour obtenir le div J'ai ce sélecteur :

$(this)

Comment puis-je obtenir l'enfant img en utilisant un sélecteur ?

2975voto

Simon Points 22764

Le constructeur de jQuery accepte un 2ème paramètre appelé context qui peut être utilisé pour remplacer le contexte de la sélection.

jQuery("img", this);

Ce qui revient à utiliser .find() comme ça :

jQuery(this).find("img");

Si les images que vous désirez sont sólo descendants directs de l'élément cliqué, vous pouvez également utiliser .children() :

jQuery(this).children("img");

24 votes

Merci @Paul, je craignais que l'utilisation de find() ne soit mauvais il s'avère que c'est le seul moyen ;)

5 votes

Si le nœud est un enfant direct, ne serait-il pas plus rapide de faire simplement $(this).children('img') ; ?

11 votes

@adamyonk, en fait non, du moins pas si on peut s'en tenir à cela : jsperf.com/jquery-children-vs-find/3

494voto

philnash Points 8783

Vous pouvez également utiliser

$(this).find('img');

qui renverrait tous les img qui sont des descendants de la div

1 votes

Dans les cas généraux, il semble que $(this).children('img') serait mieux. Par exemple <div><img src="..." /><div><img src="..." /></div></div> car on peut supposer que l'utilisateur veut trouver des images de premier niveau.

148voto

rakslice Points 1939

Si vous avez besoin d'obtenir le premier img qui est exactement d'un niveau inférieur, vous pouvez faire

$(this).children("img:first")

6 votes

Fait :first ne correspondent qu'à " d'un niveau exactement "ou correspond-il à el "premier" img qui a été trouvé ?

3 votes

@IanBoyd, .children() c'est de là que vient le "down exactement un niveau" et :first c'est de là que vient le "premier".

3 votes

@IanBoyd, cet élément ne serait pas pris en compte. Cela ne s'applique que si vous utilisez .find() au lieu de .children()

82voto

Roccivic Points 536

Si votre balise DIV est immédiatement suivie de la balise IMG, vous pouvez également utiliser :

$(this).next();

17 votes

.next() est vraiment fragile, à moins que vous puissiez toujours garantir que l'élément sera le suivant, il est préférable d'utiliser une méthode différente. Dans ce cas, l'IMG est un descendant, et non un frère, du div.

0 votes

Le PO a explicitement demandé un img enfant à l'intérieur du div.

78voto

Rayron Victor Points 351

Le site direct les enfants sont

$('> .child-class', this)

4 votes

Cette réponse est potentiellement trompeuse car il n'y a pas d'élément avec une classe "enfant", donc cela ne fonctionnera pas.

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