Mehrere Selektoren oder mehrere Funktionen - jede Effizienzsteigerung?

9

Ich frage mich, ob es möglich ist, den folgenden Code prägnanter zu machen:

%Vor%

Der Name des Landes bleibt für jeden gleich, wobei "Trigger" oder "Img" am Ende hinzugefügt wird. Es gibt hier eine Menge Wiederholungen, die darauf hindeuten, dass ich nicht den besten Weg gehe.

Ich hatte Gedanken herum:

  • Erstellen eines Fallszenarios oder
  • Irgendwie wird der Selektor für eine Auswahl verwendet, er wird zu einer Zeichenkette, teilt seinen Namen auf, um das verwendete Land zu erfassen und wendet dies auf die verschachtelte fadeIn / Out-Funktion mit 'Img' am Ende an.

Ist das möglich oder bin ich zu ausgefallen?

Edit 1: Vielen Dank für all die Antworten, Entschuldigung dafür, dass ich den HTML-Code nicht gepostet habe. Kurz gesagt, ich benutze Bildkarten über einem bg-Bild (der Erde), während der Schwebeflug auslöst, um meine absolut positionierten Schwebebilder ein- und auszublenden.

%Vor%

Reigels Antwort scheint der Weg dorthin zu sein, krank auszuprobieren, Bericht zu erstatten, weitere Kommentare willkommen! :)

    
demolish 30.07.2010, 06:18
quelle

4 Antworten

2

Ich, ohne Kenntnis des HTML, suggeriere dies ...

%Vor%

Sie können auch .replace() verwenden, wie es von Anurag im Kommentar unten ... vorgeschlagen wurde.

%Vor%

Demo

    
Reigel 30.07.2010, 06:30
quelle
2

Da es so aussieht, als ob Sie nur auf unique ids zugreifen, verwenden Sie am besten ein lookup table IMO.

%Vor%

TROCKEN! alles fertig!

Eine andere effizientere Methode wäre die Verwendung von event delegation .

Wenn alle hover -Elemente die gleiche TAG haben, könnte dieser Ansatz nützlich sein:

%Vor%

Angenommen, alle Ihre Elemente " hoverable " wären DIV s. Sie sollten diesen Elementen immer noch ein classname geben, damit nur diese spezifischen Elemente angesprochen werden.

Es macht sehr viel Sinn, die root element für delegate() einzuschränken. Hier verwende ich document.body , was .live() tun würde. Das Tolle an .delegate() ist, dass wenn Ihre Hover-Elemente einen übergeordneten Knoten teilen, Sie delegate() auf diesem Knoten anwenden können. Auf diese Weise reduzieren Sie die Anzahl der gebundenen Ereignishandler

(2 statt 6).

    
jAndy 30.07.2010 06:31
quelle
0

lol, sieht so aus, als wäre er ungefähr gleich groß oder länger als dein Code, aber definitiv trockener.

Danke an @Andy für den Hinweis auf die Leistungseinbußen bei der vorherigen Version mit $(..).each .

%Vor%

Wenn Sie den HTML-Code ändern können, würde ich das gesamte Wissen in die Seite selbst codieren und jQuery verwenden, um Hover-Ereignisse einzurichten.

%Vor%

Javascript

%Vor%     
Anurag 30.07.2010 06:57
quelle
0

Oder, um die Dinge viel einfacher zu machen, fügen Sie zu jedem der Bilder eine Markierungsklasse hinzu, die 'fadingImage' genannt wird, und verwenden Sie dann diesen Code ...

%Vor%

Dies funktioniert, weil alle Bilder, unabhängig von ihrer ID, auf die gleiche Weise behandelt werden. Sie müssen nur herausfinden, auf welchen Bildern auf Ihrer Seite die Hover-Handler angehängt werden müssen, und dies geschieht mit die Markierungsklasse Sie können vielleicht sogar auf die IDs verzichten, wenn sie für nichts anderes verwendet werden.

Aktualisierung: Nein, dass ich aufgewacht bin (Danke jAndy und Reigel!), Ich werde meinen Beitrag ergänzen, um mit der Tatsache umzugehen, dass das Element, das schwebt, nicht das ist, das verblasst wird.

Ohne ein Beispiel-Markup zu haben, muss ich einige Annahmen machen, aber das ursprüngliche Poster möchte vielleicht das echte Markup bereitstellen, um die Dinge in einen Zusammenhang zu stellen.

%Vor%

Abhängig von der Markup-Struktur muss die Methode zum Auffinden von fadingImage, die mit dem fadingTrigger verknüpft ist, variieren, aber durch eine gut definierte Struktur sollte sie zuverlässig sein.

Der Grund, warum ich diese Methode gegenüber einem Array von IDs zum Nachschlagen der Elemente bevorzugen würde, ist, dass jedes Hinzufügen des Markups Änderungen am Javascript erfordern würde - das wäre besonders problematisch, wenn das Markup dynamisch generiert wird. Das Javascript könnte auch dynamisch generiert werden, um das entsprechende Array von Werten aufzunehmen, aber das würde den DRY-Principle verletzen.

    
belugabob 30.07.2010 07:07
quelle

Tags und Links