2011-08-16 33 views
5

Làm cách nào để thêm phần tử div vào khoảng 2 (hoặc nhiều hơn) div? Những gì tôi nghĩ:Tạo div bao bọc xung quanh hai div khác với jQuery

HTML:

<div class="list-price">20000</div> 
<div class="sell-price">10000</div> 

jQuery:

$('div.list-price').each(function() { 
    $(this).before('<div class="action-price">'); 
    $(this).next().after('</div>'); 
    }); 

Tôi hy vọng rằng mã trên sẽ làm điều này:

<div class="action-price"> 
<div class="list-price">20000</div> 
<div class="sell-price">10000</div> 
</div> 

Nhưng:

<div class="action-price"></div> 
<div class="list-price">20000</div> 
<div class="sell-price">10000</div> 

Ai có thể giúp tôi không?

Cảm ơn,

Gabor

+0

trước và sau khi tập quán là không hợp lệ vì đây là những phương pháp này không viết văn bản với nội dung tài liệu, họ chứ không phải viết _nodes_. Vì vậy, 1 ('trước') chèn tự động đóng (bu jQuery chính nó) thẻ, và thứ hai ('sau') bỏ qua do đánh dấu không hợp lệ – Guard

Trả lời

1

Bạn đang nghĩ đến các yếu tố như HTML, nhưng họ là những đối tượng. Bạn không thể thêm riêng thẻ bắt đầu và thẻ kết thúc vì chúng không phải là các phần tử hoàn chỉnh.

Thêm các yếu tố mới, và di chuyển divs hiện bên trong nó:

$('div.list-price').each(function() { 
    var newDiv = $('<div/>').addClass('action-price'); 
    $(this).before(newDiv); 
    var next = $(this).next(); 
    newDiv.append(this).append(next); 
}); 

Demo: http://jsfiddle.net/Guffa/eFXbN/1/

+0

Thx Guffa, bạn là đúng, nhưng một dòng là mất tích bên trong mỗi (): $ (this) .parent ('div'). AddClass ('action-price'); – riskogab

+0

@riskogab: Tôi đã thêm rằng, và cũng là một liên kết đến một bản demo. :) – Guffa

+2

xem cách tiếp cận và câu trả lời của tôi, trình dọn dẹp của nó. http://jsfiddle.net/blowsie/eFXbN/7/ – Blowsie

0
$first = ... // the 1st element 
$rest = ... // other elements, may be just the second one 
$first.wrap('<div class="wrapper"/>').parent().append($rest) 
0

tôi phải revese dòng cuối cùng của bạn để:

$ nghỉ ngơi. wrap (''). parent(). chắp thêm ($ đầu tiên);

1

Một cách tiếp cận tốt đẹp để làm điều này là thực hiện như sau.

$("div.list-price").each(function(){ 
    $(this).nextUntil("div.list-price").andSelf().wrapAll("<div class='action-price'></div>"); 
}); 

Đơn giản và dễ đọc của nó, có thể là cách mà nhà phát triển jQuery dự định viết.

6

Hãy thử sử dụng các chức năng wrapAll:

$('.list-price, .sell-price').wrapAll('<div class="action-price" />'); 
Các vấn đề liên quan