Erkennen, ob Element einen Hintergrund angegeben hat?

8

Ich versuche festzustellen, ob ein Element einen explizit gesetzten Hintergrund hat. Ich dachte, ich könnte einfach überprüfen, ob .css('background') * gesetzt ist, aber es ist inkonsistent zwischen den Browsern. Zum Beispiel zeigt chrome ein Element ohne Hintergrund als

an %Vor%

während IE8 zeigt

%Vor%

(Testfall hier )

* (Kurzschrifteigenschaften von CSS werden nicht unterstützt, um gerenderte Stile in jQuery abzurufen)

Es gibt keine bessere Möglichkeit, um jeden einzelnen Fall zu behandeln?

    
Snuffleupagus 07.11.2012, 22:01
quelle

4 Antworten

3

Temporärer Elementansatz

Es ist nicht ideal, aber Sie könnten ein temporäres Element erstellen, wenn Ihre js initiiert, einfügen Sie es irgendwo im Dokument versteckt (weil, wenn Sie nicht erhalten leere Stile für Webkit-Browser) und dann Lesen Sie den Standardhintergrundstil, der für dieses Element festgelegt wurde. Dies würde Ihnen Ihre Grundwerte geben. Wenn Sie dann mit Ihrem realen Element vergleichen, wissen Sie, dass der Hintergrund festgelegt wurde. Offensichtlich ist der Nachteil dieser Methode, dass Sie nicht erkennen können, ob Sie den Hintergrund speziell auf den Grundzustand setzen.

%Vor%

Wenn Sie globale Stile für Elemente vermeiden wollten, würde dies das System beschädigen, d. h .:

%Vor%

... Sie könnten stattdessen Folgendes verwenden, aber ich bezweifle, ob es bei älteren Browsern so gut funktioniert:

%Vor%

Hintergrund

Ich habe einige Zeit mit einem ähnlichen Problem verbracht - ich habe versucht, den ursprünglichen Wert für die Breite eines Elements zu erhalten, wenn er auf einen Prozentsatz eingestellt ist. Das war viel schwieriger als ich angenommen hatte, am Ende habe ich eine ähnliche temporäre Elementlösung verwendet. Ich habe auch erwartet, wie Rene Koch oben gesagt hat, dass die getComputedStyle Methode funktionieren würde ... wirklich nervig ist es nicht. Es ist schwierig, den Unterschied zwischen der Quell-CSS-Welt und der Laufzeit-CSS-Welt zu erkennen.

    
Pebbl 07.11.2012, 22:17
quelle
1

Das sollte funktionieren:

%Vor%

DEMO

Ich habe mich nicht darum gekümmert, gegen die Eigenschaft background zu testen, weil am Ende die berechneten Stile von backgroundImage und / oder backgroundColor geändert werden.

Hier ist der Code, der gegen Ihren Testfall läuft (mit einem weiteren hinzugefügt): Ссылка

    
Shmiddty 07.11.2012 22:19
quelle
0

Dieser Artikel erklärt, wie: Ссылка

%Vor%     
Rene Koch 07.11.2012 22:08
quelle
0

Unter Verwendung des von @pebbl vorgeschlagenen Ansatzes habe ich eine kleine jQuery-Funktion, hasBack() , geschrieben, um zu bestimmen, ob ein Element seinen Hintergrund hat.

%Vor%

Dies wurde in Chrome v22, Firefox v15, Opera 12.1, IE9, IE9 in den Browsermodi 9 compat, 9, 8, 7 und Quirks-Modus getestet.

Testfall hier .

    
Snuffleupagus 08.11.2012 16:13
quelle

Tags und Links