2011-08-07 24 views
22

Xét đoạn mã sau: (live dụ here)jQuery: Cách lấy phần tử trình bao được tạo bằng "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 
}); 

Điều gì sẽ là cách đúng đắn để có được trình bao bọc đã tạo và thay đổi các thuộc tính của nó?

Lưu ý:.wrapper các yếu tố khác trong DOM, vì vậy đây sẽ không làm việc:

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

Tôi không muốn đưa ra một độc đáo id đến wrapper tạo một trong hai.

Trả lời

29

Vì bạn chỉ quấn các yếu tố, bạn có thể sử dụng parent() để có được những giấy gói mới được chèn vào:

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

@Matthew, 'wrapAll()' trả về phần tử được bao bọc. Xem [this fiddle] (http://jsfiddle.net/2e2WL/), nó sẽ nói 'DIV' và không phải' P'. –

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

Đây không phải là cách làm việc này, xin lỗi. – func0der

5

Đối tượng jQuery được lưu trữ trong wrapper được nhân bản khi wrapAll được gọi, vì vậy bạn không thể ảnh hưởng đến .wrappers đã được chèn vào DOM bằng cách thao tác wrapper, bạn cần phải chọn chúng từ tài liệu.

+0

+1 để giải thích cách 'wrapAll()' hoạt động, mặc dù nó không trả lời câu hỏi của tôi. –

+0

@Misha - Tôi nghĩ Frederic đã làm điều đó, chỉ muốn thêm một điểm. – karim79

+0

@ karim79 có lẽ tốt hơn để làm điều đó như một bình luận cho câu trả lời gốc – andyface