Da ich hatte das gleiche Problem und konnte nichts finden „reinigen“ Ich dachte, dass ich meine Lösung geschrieben hatte. In diesem Beispiel verwende ich eine umgekehrte while
Schleife, so dass ich splice
anstelle von slice
verwenden kann. Der Vorteil ist jetzt, dass splice() nur einen Index und einen Bereich benötigt, wo slice() einen Index und die Summe benötigt. Letzteres neigt dazu, beim Looping schwierig zu werden.
Nachteil ist, ich muss den Stapel beim Anhängen umkehren.
Beispiel:
cols = 4; liCount = 35
für Schleife mit Scheibe = [0, 9]; [9, 18]; [18, 27]; [27, 35]
umgekehrt mit splice = [27, 8]; [18, 9]; [9, 9]; [0, 9]
Code:
// @param (list): a jquery ul object
// @param (cols): amount of requested columns
function multiColumn (list, cols) {
var children = list.children(),
target = list.parent(),
liCount = children.length,
newUl = $("<ul />").addClass(list.prop("class")),
newItems,
avg = Math.floor(liCount/cols),
rest = liCount % cols,
take,
stack = [];
while (cols--) {
take = rest > cols ? (avg + 1) : avg;
liCount -= take;
newItems = children.splice(liCount, take);
stack.push(newUl.clone().append(newItems));
}
target.append(stack.reverse());
list.remove();
}
Was bedeutet die Reihe von 1. in der Mitte? die Spaltenunterbrechung? –
@Alistair: Ich denke, dass diese 6, 7, 8, 9 und 10 sein sollten. –
das war ein Bug in Stack-Überlauf, änderte es, was ich geschrieben hatte –