2012-11-15 126 views
19

我如何才能僅爲clone()的目的選擇特定班級的父母的特定班級的第一個孩子?jquery選擇帶有父類的第一個孩子與類

<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) 

,並得到與類line_item_wrapper兩個內div但我得到一個空的對象,當我嘗試用這種添加:

children('.line_item_wrapper :first') 

謝謝!

回答

35

你的問題是,你的選擇我在以下幾種方式中錯誤:

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); 

參考文獻:

+0

這是非常有幫助的。非常感謝您花時間解釋這一點。 – 1252748

+0

你非常歡迎;我很高興得到了幫助! =) –

1

試試這個:

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

這將讓你的sector_order第一嫡系與類line_item_wrapper

Example fiddle

8

你傳遞一個無效的選擇器children()。 而不是

.children('.line_item_wrapper :first') 

嘗試

.children('.line_item_wrapper').first() 
2

使用:first-child

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

.first()

var form1 = $(this).closest('.sector_order').find('.line_item_wrapper').first(); 
相關問題