Verwenden von jQuery, um mehrere Elemente auf einer Seite auf die gleiche Höhe zu bringen

8

Ich habe eine Funktion, mit der ich Elemente auf einer Seite mit der Klasse equalheight mit derselben Höhe (der Höhe des höchsten Elements) erstellen kann:

%Vor%

Das Problem, zu dem ich renne, ist, dass ich zwei Reihen von Boxen habe. Die erste Zeile möchte ich alle gleich hoch haben, also gebe ich ihnen die Klasse equalheight . Okay. Gut. Nun möchte ich auch, dass die zweite Reihe von Kästen alle die gleiche Höhe hat, aber nur die Kästchen in der zweiten Reihe.

Gibt es eine Möglichkeit, diesen Code so zu ändern, dass ich die gleiche Höhe für mehrere Elementgruppen festlegen kann? Zum Beispiel, vielleicht etwas wie das Setzen der Klasse als equalheight1 , equalheight2 , etc.?

EDIT: Eine Sache, über die ich nachgedacht habe, war, jedem Element ein Datenattribut hinzuzufügen und nur das höchste Element für jedes Element mit demselben Datenattribut zu berechnen. Wie:

%Vor%     
JROB 17.08.2015, 13:35
quelle

8 Antworten

5

Wir durchlaufen alle Elemente und fügen sie den Spalten currentRow hinzu und aktualisieren die maximale Höhe. Wenn wir ein Element erreichen, dessen Oberkante sich von der vorherigen unterscheidet, aktualisieren wir alle Höhen von currentRow Spalten und setzen dann currentRow auf eine neue, und nach dem Verlassen der Schleife aktualisieren wir die Höhe der letzten Zeilenspalten.

%Vor%

Hier ist eine Geige dafür.

    
Taher Rahgooy 17.08.2015, 14:08
quelle
1

Soweit ich das sagen kann, sollten Sie in der Lage sein, jeder Zeile eine andere Klasse zu geben und einfach die Funktion in jeder Zeile auszuführen;

%Vor%

Obwohl, wenn man sich den Code genauer anschaut, scheint er sich selbst darum zu kümmern (mit dem currentRow Zeug).

Bearbeiten: Sie haben nicht , um jeder Zeile eine andere Klasse zu geben, tun Sie das einfach;

%Vor%

Und die Funktion sollte in jeder Zeile einzeln ausgeführt werden.

    
powerbuoy 17.08.2015 13:41
quelle
1

Sieht für mich so einfach aus, wie es einfach zu den Lade- und Größenänderungsfunktionen hinzuzufügen:

%Vor%

Merken Sie sich einfach den Klassennamen.

    
msoft 17.08.2015 13:41
quelle
1

Sie können den DIVs, die Sie gruppieren möchten, eine zweite Klasse hinzufügen. Etwas wie:

%Vor%

Und dann in Ihrem Javascript:

%Vor%     
James Brierley 17.08.2015 13:43
quelle
1

Sie können dies mit dem Flexbox-Layout beheben, wenn Ihr Ziel IE8 oder älter nicht benötigt.

HTML

%Vor%

CSS

%Vor%

demo: Ссылка

    
Pjetr 17.08.2015 14:23
quelle
1

Einer der effizientesten Wege, um das zu erreichen, was Sie wollen, ist, Ihre Aufgabe in zwei Funktionen aufzuteilen.

  1. Setzen Sie die Höhe der Boxen nach Zeilen in einer Funktion
  2. Geben Sie den Zeilen Klassen (wie height1, height2 ..) basierend auf dem oberen Versatz in einer anderen Funktion.

JS:

%Vor%

In HTML würden alle Boxen die gleiche Klasse haben. Zum Beispiel:

%Vor%

JSFiddle: Ссылка

    
Chitrang 17.08.2015 14:53
quelle
1

Ich gehe vielleicht ein bisschen zu weit außerhalb Ihrer Tiefe, aber wenn Sie jQuery verwenden, warum nicht ein solches Plugin erstellen?

Ich werde die gleiche name attribute-Methode verwenden, die von Chris Dobson vorgeschlagen wurde

%Vor%

Ich habe auch diese Frage gestellt um in deiner Antwort zu helfen;)

Möchte jemanden dazu bringen, es zu überprüfen. Ich werde es auch testen.

    
sourRaspberri 17.08.2015 14:44
quelle
0

Fügen Sie ein Attribut wie name * eine neue Klasse zu den Elementen hinzu - Optionsschaltflächen verwenden eine ähnliche Methode mit dem Element name , um festzustellen, welche Schaltflächen gruppiert sind.

Sie können dann wählen Sie durch die equalheight -Klasse und die neue Klasse zB. equal1 , um nur die Elemente einer Gruppe auszuwählen und jede Gruppe separat zu behandeln.

%Vor%

dann in Ihrem JavaScript:

%Vor%

* In meiner ersten Antwort wurde das Attribut name und jQuery attributeEquals vorgeschlagen, das Attribut name ist jedoch nicht für Elemente div geeignet. Ein alternativer Ansatz besteht darin, die data-* -Attribute von HTML5 zu verwenden, und es gibt ein Argument dafür, dass dies korrekt ist, aber eine neue Klasse schien geeigneter (siehe meinen Kommentar unten für mehr).

    
Chris Dobson 17.08.2015 13:51
quelle

Tags und Links