Was ich bisher tat, war folgendes:Eine bestimmte Anzahl von zufälligen Objekten aus einer Auswahl anzeigen und alle anderen mit js/jQuery ausblenden?
function randomSelectObjects(randObjects, countShow){
var i = 0;
var countRandObjects = randObjects.length;
var preselectedObj = false;
randObjects.hide(); // hide all items
while (i < countShow) { // while until we found enough items we can show
preselectedObj = randObjects.eq(Math.floor(Math.random()*countRandObjects)); // random select an object
if(preselectedObj.is(':hidden')){ // make sure it is not already unhidden
preselectedObj.show(); // show the object
i++; // up the counter – done only in case it was not already visible
}
}
}
Verbrauch:
var randObjects = $('.items');
randomSelectObjects(randObjects, 1);
Das Problem ist, dass ich in der Auswahl eines bereits aufgedeckt (show()
) Artikel innerhalb while
von Zeit zu Zeit ausgeführt wird. Ich würde gerne diesen unnötigen Overhead entfernen.
Leider scheint es keine Möglichkeit zu geben, ein Objekt aus einer zwischengespeicherten Auswahl zu entfernen. remove()
entfernt auch das Objekt aus dem DOM, das ist nicht (immer) was ich will.
Klonen die Auswahl der Objekte zuerst und dann mit remove()
würde für den Auswahlprozess funktionieren, aber dann würde es den Aufwand geben, die ausgewählten Elemente mit dem Live-DOM für tatsächlich show()
ihnen zu entsprechen.
Vielen Dank für Ihren Vorschlag! Wenn ich mein Snippet mit dem deines anderen tausche, habe ich die Seitenberechnung wie für immer, bevor ich den Inhalt tatsächlich zeige. Ich untersuche und lasse es Sie wissen, sobald ich es herausgefunden habe. (Der Fehler könnte woanders sein ...) – Hafenkranich