32

出于以下目的,我如何仅选择具有特定类的父类的特定类的第一个孩子clone()

<div class="sector_order">

    <div class="line_item_wrapper">
    SELECT THIS DIV
    </div>

    <div class="line_item_wrapper">
    NOT THIS DIV
    </div>

</div>

我正在尝试这样:

var form1 = $(this)
    .parents('.sector_order')
    .children('.line_item_wrapper')
    .children().clone(true)

并使用 class 获取两个内部 div line_item_wrapper,但是当我尝试使用此添加时,我得到一个空对象:

children('.line_item_wrapper :first')

谢谢!

4

4 回答 4

55

你的问题是你的选择器是错误的,在几个方面:

parents()返回与传递给方法的选择器匹配的一个、两个或多个元素;将自己限制为使用第一个匹配的元素closest()(返回一个或不返回与传入选择器匹配的元素)。

您第一次使用该children()方法会返回两个元素,因为它们匹配提供的选择器并且具有 ; 类line_item_wrapper。您需要明确说明您想要两者中的哪一个,您可以使用:first选择器(或first()方法)或:first-child选择器。

对该方法的第二次调用会找到与选择器匹配的第一个元素的子元素,这似乎children()是您不想要的。

无论如何,如果您必须使用父级(从同一个$(this)元素开始):

var form1 = $(this).closest('.sector_order').find('.line_item_wrapper:first').clone(true);

或者:

var form1 = $(this).closest('.sector_order').find('.line_item_wrapper').first().clone(true);

或者:

var form1 = $(this).closest('.sector_order').find('.line_item_wrapper:first-child').clone(true);

或者,坦率地说,一种更简单的方法(但这确实省去了父类名检查):

var form1 = $(this).prevAll('.line_item_wrapper:last');

或者:

var form1 = $(this).siblings('.line_item_wrapper').eq(0);

参考:

于 2012-11-15T21:35:02.220 回答
12

您将无效的选择器传递给children(). 代替

.children('.line_item_wrapper :first')

尝试

.children('.line_item_wrapper').first()
于 2012-11-15T21:17:16.677 回答
3

采用:first-child

var form1 = $(this).closest('.sector_order').find(':first-child');

或者.first()

var form1 = $(this).closest('.sector_order').find('.line_item_wrapper').first();
于 2012-11-15T21:17:34.377 回答
2

试试这个:

var $firstDiv = $(".sector_order > .line_item_wrapper:eq(0)");

sector_order这将使您成为 class的第一个直系后代line_item_wrapper

示例小提琴

于 2012-11-15T21:15:59.660 回答