2011-08-07 22 views
22

Rozważmy następujący kod: (przykładowy żywo here)jQuery: Jak utworzyć element opakowania za pomocą metody "wrapAll()"?

HTML:

<div class="a">Hello</div> 
<div class="a">Stack</div> 
<div class="a">Overflow</div> 

CSS:

.wrapper { 
    background-color: #777; 
} 

JS:

$(function() { 
    var wrapper = $("<div class='wrapper'></div>"); 
    $(".a").wrapAll(wrapper); 
    wrapper.css("border", "5px solid black"); // Doesn't work 
}); 

Jaki byłby właściwy sposób uzyskać utworzone opakowanie i zmienić jego atrybuty?

Uwaga: Istnieją inne .wrapper elementy DOM, więc to nie będzie działać:

$(".wrapper").css("border", "5px solid black"); 

nie chcę dać niepowtarzalną id do utworzonego owijki albo.

Odpowiedz

29

Skoro tylko owinięte elementy, można użyć parent() celu uzyskania nowo wstawione owijarki:

$(".a").wrapAll("<div class='wrapper'></div>") 
     .parent().css("border", "5px solid black"); 
+0

@Matthew, 'wrapAll()' zwraca zawinięty element. Zobacz [to skrzypce] (http://jsfiddle.net/2e2WL/), powie "DIV" a nie "P". –

-2
$(function() { 
    var wrapper = $("<div class='wrapper'></div>"); 
    var wrapped = $(".a").wrapAll(wrapper); 
    wrapped.css("border", "5px solid black"); 
}); 
+0

To nie działa w ten sposób, przepraszam. – func0der

5

Przedmiotem jQuery przechowywane w wrapper zostaje sklonowany gdy wrapAll jest wywoływana, więc nie może mieć wpływu na .wrappers, które zostały wstawione do DOM przez manipulowanie wrapper, musisz wybrać je z dokumentu.

+0

+1 za wyjaśnienie, jak działa funkcja 'wrapAll()', ale nie odpowiada na moje pytanie. –

+0

@Misha - Myślałem, że Frederic już to zrobił, chciałem tylko dodać punkt. – karim79

+0

@ karim79 prawdopodobnie lepiej to zrobić jako komentarz do oryginalnej odpowiedzi – andyface

Powiązane problemy