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>

什么是最优化的方法,用于理解和检索“容器”,其中的孩子最少?

4

2 回答 2

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.
于 2012-07-22T00:49:05.400 回答
2

避免不必要的闭包并使用 for 循环进行迭代,这应该可以很好地执行。我很确定这个解决方案比 Moin Zaman 的代码更快。虽然不那么漂亮 - 取决于您是否需要最高性能。

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

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

于 2012-07-22T00:59:39.420 回答