2

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 に答える