2012-05-11 45 views
5

Tôi muốn đếm sibling bởi lớp,anh chị em jquery không trả lại kết quả đúng?

html,

<div class="item-sibling">1</div> 
<div class="item-holder"><div class="item-sibling">2</div></div> 
<div class="item-holder"><div class="item-sibling">3</div></div> 
<div class="item-holder"><div class="item-sibling">4</div></div> 
<div class="item-holder"><div class="item-sibling">5</div></div>​ 

jquery,

var len = $('.item-sibling').siblings().css({background:'red'}).length; 
alert(len);​​​​ // return 4 

nó không bao gồm <div class="item-sibling">1</div>

làm thế nào tôi có thể bao gồm nó?

jsfiddle link

và nếu tôi thay đổi html để,

<div class="item-sibling">0</div> 
<div class="item-sibling">1</div> 
<div class="item-holder"><div class="item-sibling">2</div></div> 
<div class="item-holder"><div class="item-sibling">3</div></div> 
<div class="item-holder"><div class="item-sibling">4</div></div> 
<div class="item-holder"><div class="item-sibling">5</div></div> 

tôi sẽ nhận được 6 thời gian này. Lạ thật!

EDIT,

<div class="group-a"> 
    <div class="item-sibling">1</div> 
    <div class="item-holder"><div class="item-sibling">2</div></div> 
    <div class="item-holder"><div class="item-sibling">3</div></div> 
    <div class="item-holder"><div class="item-sibling">4</div></div> 
    <div class="item-holder"><div class="item-sibling">5</div></div>​ 
</div> 


<div class="group-b"> 
    <div class="item-sibling">1</div> 
    <div class="item-holder"><div class="item-sibling">2</div></div> 
    <div class="item-holder"><div class="item-sibling">3</div></div> 
</div> 

Có hàng loạt các nhóm với cùng lớp, và tôi muốn đếm anh chị em một nhóm nhắm mục tiêu của động ví dụ như nhóm đầu tiên .

+0

anh chị em + 1 = câu trả lời – musefan

+1

Tất cả các yếu tố '.item-sibling' nhưng là người đầu tiên một người có anh chị em ruột ... bạn có 4 phần tử '.emem-holder' là các phần tử của phần tử' .emem-sibling' đầu tiên. Tất cả các phần tử '.emem-sibling' khác không có anh chị em. Tôi nghĩ bạn không hiểu thuật ngữ ... vấn đề thực sự của bạn là gì? Bạn đang cố gắng đạt được gì với mã đó? * edit: * Trong trường hợp khác, bạn nhận được 6 phần tử bởi vì bạn có được sự kết hợp của anh chị em của hai thành phần '.emem-sibling' đầu tiên. –

+0

số nào bạn đang cố gắng tìm? để đếm số phần tử với lớp 'item-sibling' sử dụng' $ ('. item-sibling'). lenght' – ManseUK

Trả lời

8

Bạn có thể làm

var len = $('.item-sibling').siblings().andSelf().css({background:'red'}).length; 

Hoặc ...

var len = $('.item-sibling').parent().children().css({background:'red'}).length; 

Chỉnh sửa: sau khi đọc được cập nhật của bạn, tôi xin đề nghị như sau:

1) Thêm một chung lớp "nhóm" cho mỗi nhóm. Ví dụ:

<div class="group group-a"> 
    ... 
</div> 

2) Sau đó, tận dụng lợi thế của lớp đó để tìm tất cả "anh chị em":

var len = $('.item-sibling:first').closest('.group') 
    .find('.item-sibling').css({background:'red'}).length; 
+0

cảm ơn, jmar. Tôi nhận được '9' như là kết quả mặc dù và nó phải là' 5' ... – laukok

+0

@lauthiamkok: Thay vì cố gắng tìm một giải pháp cho giải pháp của bạn, hãy giải thích vấn đề thực tế của bạn là gì. Có lẽ bạn không cần/muốn '.siblings()' ở tất cả! Bạn chỉ muốn đếm các phần tử '.item-sibling'? –

+0

Sau khi đọc câu hỏi được cập nhật của bạn, tôi phải đồng ý với @Felix - những gì bạn mô tả không thực sự là anh chị em. Trong vấn đề của bạn, những gì định nghĩa một anh chị em? Những gì bạn đã thực sự mô tả tại thời điểm này chỉ là tất cả các phần tử với cùng một lớp ... mà chỉ là '$ ('. Item-sibling'). Length'. – jmar777

2

Đó là bởi vì anh chị em là những người khác . Hãy thử jQuery andSelf() bao gồm phần tử đích cho bộ đã tìm nạp.

var len = $('.item-sibling') 
    .siblings() 
    .andSelf() 
    .css({background:'red'}) 
    .length; 

Và HTML thứ hai mà bạn có, bạn có 2 .item-sibling01. jQuery được 0 anh chị em của (.item-holder, bao gồm 1) và 1 anh chị em của (.item-holder, bao gồm 0), mà làm cho tất cả 6 tất cả trong tất cả.

+1

['andSelf'] (http://api.jquery.com/andSelf/) hiện không còn được dùng như JQuery 1.8 và thay thế của nó là [' addBack() '] (http://api.jquery.com/addBack /). – johntrepreneur

1

Theo tài liệu jquery.

"Phần tử gốc không được bao gồm trong số các anh chị em, điều quan trọng cần nhớ khi chúng tôi muốn tìm tất cả các phần tử ở cấp độ cụ thể của cây DOM."

ref: http://api.jquery.com/siblings/

0

Nếu bạn muốn đếm tất cả các div với class = "item-sibling", tại sao không chỉ làm

$('.item-sibling').length; 

này sẽ đếm tất cả 5 divs?

2

Ok, bây giờ mà chúng ta làm rõ những gì bạn muốn, nếu bạn có một tham chiếu đến nhóm, bạn chỉ có thể làm:

var items = $group.find('.item-sibling').length; 

Nếu bạn có một tham chiếu đến một yếu tố .item-sibling, làm:

var items = $item.closest('.group').find('.item-sibling').length; 

Giả định rằng mỗi nhóm có một lớp chung.

Nếu bạn muốn có được một danh sách các số nguyên tố trong mỗi nhóm, bạn phải lặp qua từng nhóm:

var num_items = $('.group').map(function() { 
    return $(this).find('.item-sibling').length; 
}).get(); 
+0

Cảm ơn Felix, tôi cũng có một giải pháp ngay bây giờ 'var len = $ ('. Item-sibling'). Unwrap(). Siblings(). Css ({background: 'red'}). \t \t cảnh báo (len); 'có thể không tốt như bạn nhưng nó hoạt động. – laukok

+1

Tôi không hiểu tại sao bạn tiếp tục sử dụng '.siblings()', nhưng nếu bạn vui vẻ với nó;) –

+0

sai lầm của tôi khi tiếp tục với anh chị em :-) – laukok

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