2012-07-22 4 views
2

두 개의 컨테이너가 서로 인접 해 있으며 그 안에 컨테이너가 있습니다.최소한의 자녀가있는 부모를 얻는 방법?

<ul class="containers"> 
    <li>Matt</li> 
    <li>John</li> 
    <li>Mark</li> 
</ul> 
<ul class="containers"> 
    <li>Roger</li> 
    <li>Bill</li> 
    <li>Lara</li> 
    <li>Miriam</li> 
    <li>Dylan</li> 
    <li>Harry</li> 
</ul> 

은 내부에 적어도 아이들과 함께, 이해와 "용기"를 검색하기위한 가장 최적화 방법은 무엇입니까?

+1

당신은 * 빠른 * 솔루션, 당신이 체크 한 잘못된 답을 찾고 있다면. 내 솔루션은 약 10 배 빠릅니다. 성능 비교는 다음과 같습니다. http://jsperf.com/comparing-two-child-element-counters – Hubro

+0

@Codemonkey, 맞습니다. 그러나 jQuery에서 가장 빠른 솔루션을 찾고 있었고 기본 JS가 아닙니다. –

+0

내 솔루션은 또한 jQuery를 사용하여 요소를 선택하고 결과 요소를 jQuery 객체로 쉽게 래핑하여 허용 된 답변과 동일한 결과를 얻을 수 있습니다. 차이점은 솔루션이 함수에서 래핑 될 때 함수가 기본 JavaScript 또는 내부에서 느린 jQuery 함수를 사용하는지 여부입니다. – Hubro

답변

3
var $el = $('ul.containers:first'); 

$('ul.containers').each(function(){ 
    if($(this).children().length < $(this).next('ul.containers').children().length){ 
    $el = $(this); 
    } 
}); 

console.log($el); //$el is now the parent with the least children. 

경우, 또는 하나의 라인과는 약간 짧은 버전 : 불필요한 개폐를 방지하고,이 루프이 매우 훌륭하게 수행하여 반복한다

var $el = $('ul.containers:first'); 

$('ul.containers').each(function(){ 
    $el = $(this).children().length < $(this).next('ul.containers').children().length ? $(this) : $el ; 
}); 

console.log($el); //$el is now the parent with the least children. 
+0

아주 좋아, 내 "검색"부분을 완벽하게 이해했습니다. –

+0

그러나 상위 컨테이너가 두 개 이상 있으면 어떻게됩니까? –

+0

** 모든 ** UL 요소를 반복하고 자식 수를 비교합니다. 번호는 문제가되지 않습니다. jQuery의'each' 함수를 사용하는 것은 네이티브 루프만큼 빠르지는 않습니다. 또한 숫자를 직접 확인하는 대신 jQuery 요소에 'this'를 래핑하여 아이들을 직접 계산하는 대신 쓸데없는 것으로 간주 될 수 있습니다 – Hubro

2

. 나는이 솔루션이 Moin Zaman의 코드보다 빠르다고 확신한다. 귀엽지는 않지만 최대 성능이 필요한지 여부에 달려 있습니다.

JSFiddle에
var containers = $('.containers'); 
var least_children = null; 
var smallest_container = null; 

for(var i = 0; i < containers.length; i++) 
{ 
    var container = containers[i]; 

    if(least_children === null) 
    { 
     least_children = container.childElementCount; 
     smallest_container = container; 
    } 
    else if(container.childElementCount < least_children) 
    { 
     least_children = container.childElementCount; 
     smallest_container = container; 
    } 
}; 

// smallest_container now contains the UL with the least children as a 
// HTMLElement 

: http://jsfiddle.net/BXnnL/3/

+0

두 사람을 비교할 시간이 있다면 : http://jsperf.com/ –

+0

@MoinZaman : 내 솔루션은 10 배 빠릅니다. http://jsperf.com/comparing-two-child -element-counters – Hubro

+1

당신의 솔루션이 확실히 빠르다고 생각합니다. –

관련 문제