jquery sélectionner le premier enfant de la classe d'un parent avec classe
Comment puis-je sélectionner uniquement le premier enfant d'une classe particulière d'un parent avec une classe particulière pour l'application de l' clone()
?
<div class="sector_order">
<div class="line_item_wrapper">
SELECT THIS DIV
</div>
<div class="line_item_wrapper">
NOT THIS DIV
</div>
</div>
je suis en train d'essayer comme ceci:
var form1 = $(this)
.parents('.sector_order')
.children('.line_item_wrapper')
.children().clone(true)
et obtenir à la fois intérieure divs avec la classe line_item_wrapper
, mais je reçois un objet vide quand je l'ai essayer avec cette addition:
children('.line_item_wrapper :first')
Merci!
4 réponses
Vos problèmes, c'est que le sélecteur est mauvais, de plusieurs façons:
parents()
renvoie un, deux ou plusieurs éléments qui correspondent au sélecteur passé à la méthode; pour vous limiter à l'élément correspondant, utilisez closest()
(qui renvoie un, ou aucun, éléments qui correspondent au sélecteur passé).
votre première utilisation du children()
la méthode renvoie les deux éléments, puisqu'ils correspondent au sélecteur fourni et ont la classe de line_item_wrapper
; vous avez besoin de spécifiez explicitement lequel des deux vous voulez, vous pouvez utiliser le :first
sélecteur (ou first()
méthode), ou le :first-child
sélecteur.
Le deuxième appel à children()
méthode trouve les enfants du premier élément compensée par le sélecteur, vous n'avez pas semble vouloir.
en tout cas, si vous devez utiliser le parent (à partir du même $(this)
élément):
var form1 = $(this).closest('.sector_order').find('.line_item_wrapper:first').clone(true);
Ou:
var form1 = $(this).closest('.sector_order').find('.line_item_wrapper').first().clone(true);
Ou:
var form1 = $(this).closest('.sector_order').find('.line_item_wrapper:first-child').clone(true);
ou, franchement, une approche plus simple (mais cela dispense du nom de classe parent cochez):
var form1 = $(this).prevAll('.line_item_wrapper:last');
Ou:
var form1 = $(this).siblings('.line_item_wrapper').eq(0);
Références:
vous passez un sélecteur invalide à children()
.
Au lieu de
.children('.line_item_wrapper :first')
.children('.line_item_wrapper').first()
Utiliser :first-child
var form1 = $(this).closest('.sector_order').find(':first-child');
OR .first()
var form1 = $(this).closest('.sector_order').find('.line_item_wrapper').first();
essaye ceci:
var $firstDiv = $(".sector_order > .line_item_wrapper:eq(0)");
vous obtiendrez ainsi le premier descendant direct de sector_order
de la classe line_item_wrapper
.