jQuery - finden Sie heraus, die Breite eines Elementes angegeben werden wie in CSS (z.B. in %Alter, wenn es angegeben wurde, in %Alter, nicht nur in px)
Ähnlich dieser Frage:
Holen Sie sich die CSS-Regel Prozentwert in jQuery
Aber, ich Schreibe an einem plugin und es muss mit ihm umgehen anmutig davon abhängig, wie die Breite war ursprünglich angegeben. Wenn das element, war ursprünglich in Pixel angegeben, es ist in Ordnung, dass ist der Wert, der .width()
, .innerWidth()
, outerWidth()
und .css('width')
zurück.
Aber ich möchte wissen, ob es war ursprünglich als Prozentsatz. Also, wenn das container-element ändert, dann weiß ich um eine Neuberechnung der Breite, die ich auf meinem element.
Ist das möglich? Das einzige, was ich denken kann, ist zu versuchen, um eine Schleife durch Dokument.stylesheets auf der Suche nach relevanten Regeln, aber ich denke, das wird mehr oder weniger unmöglich zu tun generisch. Irgendwelche anderen Ideen?
Dank!
.css('width')
zurück nicht die Eigenschaft als string? Wie sonst würden Sie die auto
Wert?Es schien nicht von meinen Experimenten (und aus der Antwort weiter unten klingt es wie diese browser-depandant). Danke für die Antwort tho 🙂
InformationsquelleAutor vitch | 2010-08-21
Du musst angemeldet sein, um einen Kommentar abzugeben.
Scheint es, wie
.css('width')
für mich funktioniert.Kleines Beispiel, um zu zeigen, das funktioniert:
Dieser gibt mir eine Ausgabe von "10%". Hoffe, ich habe nichts verpasst, offensichtlich.
Pflege zu erarbeiten? Vielleicht bin ich Missverständnis, ihn
Wenn ich lese ihn richtig, er ist auf der Suche nach der ursprünglich angegeben mit, nicht die effektiven pixel Breite.
Es hängt von der browser. Auf IE jQuery verwendet
currentStyle
die Ihnen die angegebene Breite. Auf anderen Browsern wird es verwendetgetComputedStyle
gibt die berechnete Stil, der ist gelöst von%
zupx
.Eigentlich hab ich gerade geschaut und in diesem bestimmten Beispiel wird die Arbeit, weil jQuery gibt auch den angegebenen Wert, wenn es auf einen inline-style (
style="width: 10%"
). Dies funktioniert nicht für stylesheet styles. Diese Art der Sache ist ziemlich typisch für jQuery Tun, Was ich Meine-Ansatz, versucht sich zu verstecken grundlegende browser und konzeptionellen Unterschiede (siehe auch den horror, dass istattr()
). Es ist unweigerlich ein leaky abstraction, so dass der Fehler umso mehr verwirrend.InformationsquelleAutor data
Konnte ich nicht finden einen Weg, das zu tun, was ich gefragt habe in der Frage, aber ich kam mit einem workaround, das mir erlaubt, zu tun, was ich brauche, um in meiner situation. Der code in Frage, ist für mein jQuery-plugin namens jScrollPane ( http://jscrollpane.kelvinluck.com/ ). Am Ende, was ich tun ist, setzen Sie die Breite auf null (
elem.css('width', null);
). Dies entfernt die Breite hatte ich mir zuvor und ermöglicht es dem element zu nehmen, ist es Natürliche Breite definiert im stylesheet (z.B. mit einem Prozentsatz, wenn das ist, wie es definiert wurde). Kann ich dann Messen Sie diesem neuen Wert ein, und verwenden, setzen Sie die Breite auf die Anzahl, die ich mir Wünsche...InformationsquelleAutor vitch