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!

21
demandé sur WEFX 2012-11-16 01:14:51

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:

38
répondu David Thomas 2012-11-15 21:35:02

vous passez un sélecteur invalide à children(). Au lieu de

.children('.line_item_wrapper :first')

.children('.line_item_wrapper').first()
11
répondu Blazemonger 2012-11-15 21:17:16

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();
2
répondu Sushanth -- 2012-11-15 21:17:34

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.

Exemple de violon

1
répondu Rory McCrossan 2012-11-15 21:15:59