27

フロートがあるa内のアイテム(liタグ)の数を見つける方法はありますか:に設定します。タグで視覚的に表されるフォルダがたくさんあると仮定します。フローティング動作のため、が1つの行に収まらない場合はすぐにプッシュダウンされ、行と列が表示されます。私の質問はullili

jQuery..etcの使用li各行の数を決定する方法はありますか

コード

<ul>
 <li>A</li>
 <li>B</li>
 <li>C</li>
 <li>D</li>
 <li>E</li>
 <li>F</li>
 <li>G</li>
 <li>H</li>
 <li>I</li>
 <li>J</li>
</ul>

スタイル

ul,li{margin:0 0;padding:0 0;}
ul li{display:inline;float:left}

私の解決策では、liのFまでは1つの行を作成し、残りは以下のように別の行を作成します。行1の要素数(私の場合は6)を取得するjqueryの方法が必要です。

A B C D E F
G H I J

コンテクスト

キーボードイベントを追加して、左、右、上、下を使用して各フォルダー(li)に移動します。左右は、次と前のliを強調表示するのと同じくらい簡単です。上と下のキーは、次の行と上の行に移動する必要があります。今、あなたはそれを得るでしょう:)

4

7 に答える 7

47

これを行うには、上部(y軸)の位置が前の兄弟の位置と一致するLIの数を確認します。

デモ: http: //jsfiddle.net/KgBpx/1/

更新されたデモ:http: //jsfiddle.net/KgBpx/2/

注:ロジックを完全に示すために、ウィンドウのサイズ変更でも再計算が行われます。

コード:

function calculateLIsInRow() {
    var lisInRow = 0;
    $('ul li').each(function() {
        if($(this).prev().length > 0) {
            if($(this).position().top != $(this).prev().position().top) return false;
            lisInRow++;
        }
        else {
            lisInRow++;   
        }
    });
    console.log('No: of lis in a row = ' + lisInRow);
}

calculateLIsInRow();

$(window).resize(calculateLIsInRow);

ノート

LIの総数がlisInRowの倍数でない場合は、最後の行を除いて、LIの数はすべての行で同じになります。最後の行のLIの数は、次のようにして簡単に見つけることができます。$('ul li').length % lisInRow

于 2012-07-18T10:40:04.057 に答える
0

これを試してください(実際には、デバッグが必要な場合があります)

var numberPerRow = [];
var offsets =      [];
$("li").each(function(){
    var thisOffset = $(this).offset().top; 
    var index = $.inArray(thisOffset, offsets);
    if(index >=0){
        numberPerRow[index]++;
    }else{
        offsets.push(thisOffset);
        numberPerRow.push(1);
    }
});

アップデート

配列内で最大の行値を取得するには、次のようなものを使用できます。

console.log( Math.max.apply(null, numberPerRow) );
于 2012-07-18T10:40:28.260 に答える
0

@techfoobar スクリプトの小さな更新:

アイテム数が共通アイテム数と異なる場合、最後の行を非表示にすることができます

http://jsfiddle.net/cavico/KgBpx/222/

if(lisInLastRow != lisInRow) {
    $('ul li').slice( -lisInLastRow ).hide();
}
于 2014-06-03T14:41:47.360 に答える
0

次の関数を使用して、各行ごとに Li アイテムの数を持つ配列を取得できます。float が残っている li アイテムのみが必要な場合は、その条件を簡単に追加できます。

function computeItemsPerRow() {
        var itemsInRows = new Array();

        var countLi = $('ul li');
        var rowWidth = $('#rowContainer').width(); // TODO: Replace with the proper row container selector.
        var curRowWidth = 0;
        var itemsInCurRow = 0;

        for (var i = 0; i < countLi; i++) {
            var itemWidth = $('li:eq(' + i + ')').width();
            if (curRowWidth + itemWidth > rowWidth || i == countLi - 1) {

                itemsInRows[itemsInRows.length] = itemsInCurRow;
                itemsInCurRow = 1;
                curRowWidth = itemWidth;
            }
            else {
                itemsInCurRow++;
                curRowWidth = curRowWidth + itemWidth;
            }
        }

        return itemsInRows;

    }
于 2012-07-18T10:36:08.647 に答える
0

あなたはトップポジションでそれを行うことができます:

var arr = [];

$('ul li').each(function(i){
    arr[i] = $(this).position().top;
});

次に、結果の配列で一致する値をカウントします - Javascript の配列で一致する値をカウントする方法

于 2012-07-18T10:37:55.663 に答える