2012-05-11 5 views
5

나는 sibling에 의해 클래스을 계산하려면,jquery count 형제가 올바른 결과를 반환하지 않습니까?

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 

그것은 <div class="item-sibling">1</div>

내가 그것을 어떻게 포함 할 수 있습니다 포함되지 않습니다?

jsfiddle link

나는에 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> 

을 변경하면 나는 6이 시간을 얻을 것이다. 이상한!

편집,

<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> 

같은 클래스와 그룹의 시리즈가있다, 그리고 나는 첫 번째 그룹 예를 들어 동적으로 대상 그룹의 형제를 계산합니다. 당신은

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

또는 작업을 수행 할 수 있습니다

+0

형제 + 1 = 대답 – musefan

+1

모든'.item - sibling' 요소하지만 첫 번째 : 각 그룹의 요소 수의 목록을 얻고 싶다면

, 각 그룹을 반복해야 하나는 형제가 ... 당신은 첫 번째'.item-sibling' 요소의 형제 인 4 개의 .item-holder 요소를 가지고 있습니다. 다른 모든 .item-sibling 요소에는 형제가 없습니다. 나는 당신이 용어를 올바르게 이해하지 못했다고 생각합니다 ... 당신의 실제 문제는 무엇입니까? 이 코드로 무엇을 달성하려고합니까? * 편집 : * 다른 두 경우에는 처음 두 개의'.item-sibling' 엘리먼트의 형제와의 결합을 얻기 때문에 6 개의 원소를 얻는다. –

+0

찾으려는 번호는 무엇입니까? 'item-sibling '의 클래스를 가진 엘레멘트의 수를 세는 것은'$ ('. item-sibling ')을 사용한다. lenght' – ManseUK

답변

8

...

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

편집 :

1) 일반적인 추가 :이 업데이트 읽은 후, 나는 다음과 같은 제안 "group"클래스를 각 그룹에 추가합니다. 예를 들어,

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

2) 모든 "형제"를 찾아 그 클래스를 활용 : 형제 자매가 다른이기 때문에

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

. 결과로 '9'가 나오고 '5'가되어야합니다 ... – laukok

+0

@lauthiamkok : 솔루션에 대한 해결책을 찾는 대신 실제 문제가 무엇인지 설명해주십시오. 어쩌면 당신은'.siblings()'을 전혀 필요로하지 않을 수도 있습니다. '.item-sibling' 요소를 세고 싶습니까? –

+0

업데이트 된 질문을 읽은 후에는 @Felix에 동의해야합니다. 당신이 묘사하는 것은 형제가 아닙니다. 당신의 문제에서 무엇이 형제를 정의합니까? 이 시점에서 여러분이 실제로 설명한 것은 동일한 클래스를 가진 모든 요소입니다 ... $ ('. item-sibling'). length'가됩니다. – jmar777

2

그것입니다. 가져온 세트에 대상 요소를 포함하는 jQuery andSelf()을 시도하십시오.

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

그리고 당신은 두 번째 HTML, 당신은 2 01이다 .item-sibling 있습니다. jQuery는 0 형제 (을 포함하여 .item-holder)와 1 형제 (.item-holder, 0 포함)를 모두 가져 오므로 모두 6이됩니다.

+1

['andSelf'] (http://api.jquery.com/andSelf/)는 이제 JQuery 1.8에서 더 이상 사용되지 않으며 대체는 ['addBack()']입니다 (http://api.jquery.com/addBack /). – johntrepreneur

1

jquery 설명서에 따르면.

"DOM 트리의 특정 레벨에서 모든 요소를 ​​찾으려고 할 때 기억해야 할 원래 요소는 형제 사이에 포함되지 않습니다."

심판 :

0

당신이 클래스 = "아이템 형제", 왜 단지

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

이 모두 5 개 된 div를 계산합니다하지 모든 div의 수를 계산하려면 http://api.jquery.com/siblings/?

우리는 당신이 그룹에 대한 참조가있는 경우, 당신은 간단하게 할 수있는, 원하는 것을 명확히하는 것이 지금
2

확인 : 당신은 An .item-sibling 요소에 대한 참조가있는 경우,

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

수행

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

여기에는 각 그룹에 공통 클래스가 있다고 가정합니다.

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

감사합니다 펠릭스, 나는 또한 솔루션을 지금 var Len = $ ('. item-sibling'). unwrap(). 형제() .css ({background : 'red'}). 길이; \t \t 경고 (len);'아마도 당신만큼 좋지는 않지만 작동합니다. – laukok

+1

'.siblings()'을 계속 사용하는 이유를 모르겠지만 재미가 있다면 –

+0

내 형제 자매와 계속 일하는 내 실수 :-) – laukok

관련 문제