Zeichnen Sie schnell ein Array von Unicode-Symbolen in JavaScript neu

8

Ich möchte die Hintergrund- / Vordergrundfarbe vieler Symbole mit derselben CSS-Klasse ändern. Im Moment mache ich es mit jQuery - wie $('back_COLORED').css('background-color', '#00FF00') , aber dieser Ansatz ist langsam , wenn es viele Elemente mit einer solchen Klasse (& gt; 900) gibt.

Es liegt daran, dass jQuery CSS-Regeln nicht selbst ändert, sondern alle Elemente einzeln findet und Inline-Stile auf sie anwendet. Zumindest sehe ich das im Inspektor. Die Frage ist also:

  • Wie kann ich die CSS-Regeln selbst ändern?
  • Wird es viel schneller sein?
  • Kann ich es browserübergreifend machen (IE6 zählt nicht)?

UPD : Ich versuche, eine Art Farbschema-Editor zu erstellen. Die Quelle ist Ссылка . Kümmern Sie sich nicht um PHP Dinge, Editor ist vollständig Client-Seite (mit nur ein paar Bibliotheken aus dem Netz geholt).

UPD2 : Versuchter Leinwand-Ansatz, immer noch langsam. Canvas-Zweig ist Ссылка .

    
Kuroki Kaze 25.02.2010, 14:25
quelle

8 Antworten

1

Wenn Sie das Eltern-Div durch ID auswählen können, könnten Sie vielleicht nach dem Tag darin auswählen? Oder gibt es Elemente der gleichen Art, die die Farbe ändern sollten und die nicht innerhalb des Elternteils?

Es wäre schön, eine Vorstellung davon zu haben, was Sie hier bauen. 900+ Objekte scheinen viel zu sein ... vielleicht könnte ein völlig anderer Ansatz verwendet werden? Leinwand, SVG?

    
Adrian Schmidt 25.02.2010, 15:04
quelle
3

Die browserübergreifende Methode zum Überschreiben einer Klassendefinition besteht darin, eine neue Regel zu schreiben und sie am Ende des letzten Stylesheets im Dokument einzufügen. Sie können eine vorhandene Stilregel bearbeiten, aber selbst einige neuere Browser können es schwierig machen.

%Vor%

Sie können so viele 'property: value;' Bits im csstext, wie Sie brauchen. Denken Sie daran, ein '.' zu einem Klassennamen oder einem '#' zu einer ID, und die CSS muss als Stilregel geschrieben werden (mit Bindestrichen, nicht CamelCase).

Natürlich werden Inline-Stile nicht überschrieben, und es ist für kleine lokale Änderungen übertrieben. Es kann auch das Neuzeichnen der Seite offensichtlicher machen als das Ändern eines Elementes nach dem anderen, aber es könnte genau das sein, was du hier brauchst.

    
kennebec 25.02.2010 15:49
quelle
2

Es gibt verschiedene Möglichkeiten, je nachdem, mit welchem ​​Browser Sie arbeiten. Dies ist im Quirks-Modus dokumentiert .

Einige Bibliotheken bieten eine Abstraktionsschicht, z. B. das YUI-StyleSheet-Dienstprogramm .

Es sollte eine deutliche Leistungssteigerung geben, da Sie JS / DOM nicht zum Durchlaufen aller Elemente verwenden.

Ein anderer Ansatz wäre, Ihre Stile vorher festzulegen:

%Vor%

Und bearbeite dann document.body.className

    
Quentin 25.02.2010 14:28
quelle
1

Verstecken Sie die Elemente, die Sie ändern möchten, bevor Sie sie ändern, nehmen Sie die Änderung vor und zeigen Sie sie dann erneut an. Dies ist üblich, um Dinge zu beschleunigen, wenn Sie die Repaint-Ereignisse im Ansichtsfenster minimieren. In diesem Fall, wenn Sie nur eine CSS-Eigenschaft festlegen, ist es vielleicht nicht von Vorteil, aber es ist einen Versuch wert, sage ich.

Versuchen Sie:

%Vor%

oder

%Vor%     
anddoutoi 25.02.2010 16:14
quelle
1

Ich würde versuchen, eine CSS-Eigenschaft zu ändern, statt das DOM zu analysieren.
Hier geht es um die CSS-Engine vs. DOM + JS, und der Gewinner ist klar.

Es passiert, dass ich gerade eine kleine Bibliothek hochgeladen habe, die CSS durch Javascript ersetzt: jstyle

Dies ist möglicherweise ein Overkill, aber Sie finden im Quellcode von jstyle.js den gesamten Code, den Sie benötigen, um die CSS-Eigenschaften Ihrer Seite cross browser zu aktualisieren.

    
Mic 25.02.2010 15:41
quelle
0

Ich denke, eine bessere Lösung wäre, eine spezifischere CSS-Regel zu schreiben (die die normale Farbe überschreiben würde), die durch einfaches Ändern der CSS-Klasse eines Elements aktiviert werden kann.

Also zum Beispiel, wenn Sie das folgende strukturelle Markup hatten:

%Vor%

Und CSS: -

%Vor%

Dann fügen Sie in Ihrer Abfrage die .newcolor-Klasse zum Container div hinzu: -

%Vor%

Wenn Sie das tun, wird die zweite CSS-Regel die erste überschreiben, weil sie spezifischer ist.

    
U62 25.02.2010 14:42
quelle
0

Injizieren Sie den CSS-Code in ein style -Tag:

%Vor%

und bei jeder Farbänderung mit Farbauswahl schreiben Sie nur den HTML-Code innerhalb von #changeStyle tag um.

Haben Sie keine Ahnung, ob es funktioniert (nicht getestet), aber Sie sollten es versuchen.

    
Ionuț Staicu 01.03.2010 07:24
quelle
0

Dies ist jQuery pluggin für die Arbeit mit CSS-Regeln: Ссылка

nicht sicher über seine Leistung, aber einen Versuch wert.

    
Kamarey 04.03.2010 20:00
quelle

Tags und Links