2012-06-05 46 views
6

Xin chào tôi muốn sử dụng jQuery để quấn bộ các yếu tố lớp trong một div nhưng không thể tìm ra giải phápjQuery quấn nhiều phần tử div trên cùng một lớp

HTML:

<div class="view-content"> 

    <div class="first">content</div> 
    <div class="first">content</div> 
    <div class="second">content</div> 
    <div class="third">content</div> 
    <div class="third">content</div> 

</div> 

mong muốn kết quả:

<div class="view-content"> 

    <div class="column"> 
     <div class="first">content</div> 
     <div class="first">content</div> 
    </div> 

    <div class="column"> 
     <div class="second">content</div> 
    </div> 

    <div class="column"> 
     <div class="third">content</div> 
     <div class="third">content</div> 
    </div> 

</div> 

Cảm ơn sự giúp đỡ của bạn trước!

Trả lời

1

Bạn có thể sử dụng .wrap() để quấn một cái gì đó trong một div nhưng nếu nội dung của bạn không được ra lệnh nó sẽ trở thành một mớ hỗn độn, sau đây là một ví dụ:

Input

<div class="view-content"> 
    <div class="first">content</div> 
    <div class="second">content</div> 
    <div class="first">content</div> 
</div> 

Output

<div class="view-content"> 
    <div class="column"> 
     <div class="first">content</div> 
     <div class="column"> 
      <div class="second">content</div> 
     </div> 
     <div class="first">content</div> 
    </div> 
</div> 
6

Demohttp://jsfiddle.net/kQz4Z/8/

API: http://api.jquery.com/wrapAll/

Added một ngắt dòng để bạn có thể thấy sự khác biệt ở đây :) http://jsfiddle.net/kQz4Z/10/

đang

$(function() { 

    $('.first').wrapAll('<div class="column" />') 

    $('.second').wrapAll('<div class="column" />') 

    $('.third').wrapAll('<div class="column" />') 




    alert($('.view-content').html()); 
});​ 
+2

Phương pháp này động: http://jsfiddle.net/kQz4Z/11/ – h2ooooooo

+0

@ h2ooooooo ở đây bạn truy cập http://jsfiddle.net/ZXb4Y/1/ :)) Đẹp nhất! đặt nó như là câu trả lời của bạn nếu bạn muốn, cổ vũ. –

+1

Các bạn, và làm thế nào về [động lực học của tôi] (http://stackoverflow.com/a/10896724/1249581)? :) – VisioN

2

Sử dụng phương pháp wrapAll()

$(function(){ 
    var classes = ['.first', '.second', '.third']; 

    for (i = 0; i < classes.length; i++) { 
     $(classes[i]).wrapAll('<div class="column">'); 
    }​ 

}); 

Bản trình diễn: http://jsfiddle.net/g9G85/

2

Hoặc đây là giải pháp động lực rất ngắn:

​$(".view-content > div").each(function() { 
    $(".view-content > ." + this.className).wrapAll("<div class='column' />"); 
});​ 

DEMO:http://jsfiddle.net/CqzWy/

+0

Cần lưu ý rằng phương pháp này ở dạng hiện tại của nó PHẢI sử dụng bộ chọn tổ hợp con (>) như được hiển thị. Việc không làm như vậy sẽ dẫn đến một gói div cho mỗi mục khớp với một className nhất định. (Ví dụ, trong trường hợp này, các div với lớp "thứ ba" sẽ được bao bọc trong HAI div với lớp "cột"). – Luke

0

Bạn có thể thử whit này:

var arr = $(".view-content div").map(function() { return $(this).attr('class'); }).get(); 
var results = $.unique(arr); 
var i; 

for(i = 0; i < results.length; i++){ 

    $('.out').append('<div class="columns"></div>'); 
    $('.'+results[i]).clone().appendTo('.columns:last'); 
} 

alert($('.out').html()); 

đây một ví dụ:

JSFIDDLE

Các vấn đề liên quan