2010-04-21 29 views
5

Tôi muốn đếm tổng số div bên trong một vùng chứa và chuyển đổi độ nhớt của chúng với cấu trúc như thế này. Cũng xin lưu ý rằng div.content cũng có thể nằm bên trong một vùng chứa lồng nhau hoặc lồng nhau khác. Đó là lý do tại sao tôi xử lý nó với jquery để thêm div.topmost cho mỗi thùng phụ huynh trên cùng:Đếm tổng số div trẻ em bên trong một thùng chứa

<div id="parent"> 
    <div class="counter">There are 3 div.contents inside the container below</div> 
    <div class="container"> 
    <div class="content"> 1 </div> 
    <div class="container"> <!--container inside container --> 
     <div class="content"> 2 </div> 
     <div class="content"> 3 </div> 
    </div> 
    </div> 

    <div class="counter">There are 5 div.contents inside the container below</div> 
    <div class="container"> 
    <div class="content"> 1 </div> 
    <div class="content"> 2 </div> 
    <div class="content"> 3 </div> 
    <div class="content"> 4 </div> 
    <div class="content"> 5 </div> 
    </div> 
</div> 

Và jquery:

// only grab the top most container 
    $('#parent > .container').addClass('topmost'); 
    var topMost = $(".topmost"); 
    var totContent = topMost.children('.content').size(); 

    if (topMost.length > 0) { 
     topMost.before('<div class="toggle">There are ' + totContent + ' div.contents inside the container below</div>'); 
    } 

    topMost.hide(); 

    $('#parent > .counter').click(function() { 
    $(this).next('.topmost').toggle(); 
    //alert(totContent); 
    return false; 
    }); 

Nhưng tôi không thể làm cho nó hoạt để lặp cho mỗi div. quầy tính tiền. Bộ đếm luôn hiển thị tất cả div.content. Vì vậy, việc đặt từng chức năng bị nghi ngờ là vấn đề.

Bất kỳ loại gan nào sẽ được đánh giá rất nhiều.

Cảm ơn

Trả lời

5

thử:

// only grab the top most container 
    $('#parent > .container').addClass('topmost'); 
    var topMost = $(".topmost"); 

    topMost.each(function(){ 
     var totContent = $(this).find('.content').size(); 

     if (totContent > 0) { 
     $(this).before('<div class="toggle">There are ' + totContent + ' div.contents inside the container below</div>'); 
     } 

    }) 

    topMost.hide(); 

    $('#parent > .counter').click(function() { 
    $(this).next('.topmost').toggle(); 
    //alert(totContent); 
    return false; 
    }); 
+0

Cảm ơn, nhưng nó bỏ qua div.content bên trong vùng chứa lồng nhau hoặc lồng nhau. Nó chỉ đếm div.content cấp cao nhất, nhưng không tính nội dung lồng nhau. Hầu như ở đó. Cảm ơn – swan

+0

Nhưng thay đổi trẻ em để tìm thấy đã làm các trick! Cảm ơn. Hãy thay đổi những đứa trẻ để tìm, vì vậy tôi có thể đánh dấu câu trả lời của bạn cho câu hỏi của tôi. Tôi cần rằng mỗi chức năng xấu :) – swan

+0

vui vì nó hoạt động ngay bây giờ cho bạn ... – Reigel

0

Để lấy container trên cùng bạn có thể làm

$("#parent > div.container").eq(0); 

Tôi nghĩ rằng sau đây sẽ làm điều đó cho bạn

$('#parent > div.counter').click(function() { 
    var container = $(this).next('div.container').toggle(); 
    var totContent = container.find("div.content").length; 
    alert (totContent); 
    return false; 
    }); 

Sửa

$("#parent > div.container").each(function(){ 
    var currentElem = $(this); 
    var totContent = currentElem.find("div.content").length; 
    currentElem.before('<div class="toggle">There are ' + totContent + ' div.contents inside the container below</div>' 
}); 
+0

Cảm ơn, nhưng tôi hy vọng để sản xuất các số bên ngoài sự kiện nhấp chuột. Bất kỳ gợi ý nào? – swan

+0

Thử phiên bản đã chỉnh sửa. – rahul

+0

Cảm ơn, chính xác như @Reigel. Và câu trả lời của ông đã làm các trick, chỉ bỏ lỡ "trẻ em" cho "tìm". – swan

0
var topmost = $('#parent > .container'); 
var totContent = topmost.find('.content').length; 
if (topMost.length > 0) { 
    topmost.before('<div class="toggle">There are ' + totContent + ' div.contents inside the container below</div>'); 
} 

vv

+0

Điều này vẫn chỉ tính tổng số div.content tổng thể trong trang. Cảm ơn – swan

0

Bạn cũng có thể thử với mã bên dưới:

$("#parent").each(function() { 
var total = $(this).find("div").length; 
}); 
Các vấn đề liên quan