jQuery ma funkcje height () en width (), które zwracają wysokość lub szerokość w pikselach jako liczbę całkowitą ...
Jak uzyskać wartość wypełnienia lub marginesu elementu w pikselach i liczbach całkowitych za pomocą jQuery?
Moim pierwszym pomysłem było wykonanie następujących czynności:
var padding = parseInt(jQuery("myId").css("padding-top"));
Ale jeśli na przykład podano ems, to jak mogę uzyskać wartość w pikselach?
Przeglądając wtyczkę JSizes, sugerowaną przez Chrisa Pebble'a, zdałem sobie sprawę, że moja własna wersja była właściwa :). jQuery zwraca zawsze wartość w pikselach, więc rozwiązaniem było właśnie parsowanie jej do liczby całkowitej.
Dzięki Chris Pebble i Ian Robinson
javascript
jquery
css
Malik Amurlayev
źródło
źródło
parseInt
. Cytując MDN: „ podstawa Liczba całkowita między 2 a 36, która reprezentuje podstawkę (podstawę w matematycznych systemach liczbowych) wyżej wymienionego łańcucha. Podaj 10 dla systemu liczb dziesiętnych. Zawsze określ ten parametr, aby wyeliminować zamieszanie czytelnika i zagwarantować przewidywalne zachowanie Różne implementacje dają różne wyniki, gdy podstawa nie jest podana, zwykle przyjmując domyślną wartość 10. ” Zobacz: developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…Odpowiedzi:
Powinieneś być w stanie korzystać z CSS ( http://docs.jquery.com/CSS/css#name ). Być może będziesz musiał być bardziej szczegółowy, np. „Padding-left” lub „margin-top”.
Przykład:
CSS
JS
Wynik to 10 pikseli.
Jeśli chcesz uzyskać wartość całkowitą, możesz wykonać następujące czynności:
źródło
JSizes
wtyczka z drugiej odpowiedzi (którą ostatecznie wykorzystałem) zwraca liczbę całkowitą po przekazaniu wartości zwracanejParseInt(...)
, tylko FYI.parseInt($('a').css('margin-top').replace('px', ''))
.css()
nadal zwróci wartość z „px” na końcu?Porównaj zewnętrzną i wewnętrzną wysokość / szerokość, aby uzyskać całkowity margines i wypełnienie:
źródło
that.outerHeight(true) - that.outerHeight()
dałoby całkowite marginesy pionowe, ponieważ outerHeight () obejmowałby wypełnienia i obramowania, ale wykluczałby marginesy. Zobacz api.jquery.com/outerWidth/ .Funkcja parseInt ma parametr „radix”, który definiuje system liczbowy używany podczas konwersji, więc wywołanie
parseInt(jQuery('#something').css('margin-left'), 10);
zwraca lewy margines jako liczbę całkowitą.Właśnie tego używa JSizes.
źródło
parseInt('auto', 10);
(auto
jest poprawnymargin-left
).PROSZĘ nie ładuj innej biblioteki, aby zrobić coś, co jest już dostępne natywnie!
jQuery's
.css()
konwertuje% i em na ich ekwiwalent pikselowy na początek, iparseInt()
usuwa'px'
koniec końca zwracanego ciągu i konwertuje go na liczbę całkowitą:http://jsfiddle.net/BXnXJ/
źródło
Oto, w jaki sposób możesz uzyskać otaczające wymiary:
Zwróć uwagę, że
paddingTopBottom
na przykład każda zmienna zawiera sumę marginesów po obu stronach elementu; tjpaddingTopBottom == paddingTop + paddingBottom
. Zastanawiam się, czy istnieje sposób, aby uzyskać je osobno. Oczywiście, jeśli są równe, możesz podzielić przez 2 :)źródło
IE 7
. Zobacz: stackoverflow.com/questions/590602/...Ta prosta funkcja to zrobi:
Stosowanie:
źródło
auto
,inherit
a%
wartościNaN
zależy od przeglądarki. O ile mi wiadomo, jQuery nie normalizuje się w.css()
przeciwieństwie do.width()
&.height()
Parse int
zwraca 0 dla 0px
źródło
Możesz je po prostu pobrać jak w przypadku dowolnego atrybutu CSS :
Możesz ustawić je za pomocą drugiego atrybutu w metodzie css:
EDYCJA: Jeśli potrzebujesz tylko wartości w pikselach, użyj
parseInt(val, 10)
:źródło
ok, aby odpowiedzieć na oryginalne pytanie:
możesz uzyskać dopełnienie jako użyteczną liczbę całkowitą taką jak ta:
Jeśli zdefiniowałeś inny pomiar, np. Px, po prostu zamień „ems” na „px”. parseInt interpretuje stringpart jako złą wartość, dlatego ważne jest, aby zastąpić go ... nic.
źródło
Możesz także samodzielnie rozszerzyć framework jquery o coś takiego:
W ten sposób dodajemy funkcję do twoich obiektów jquery o nazwie margin (), która zwraca kolekcję taką jak funkcja offset.
fx.
źródło
Nie używaj string.replace („px”, „”));
Użyj parseInt lub parseFloat!
źródło
Prawdopodobnie używam wtyczki jiteryjnej github.com/bramstein/jsizes do wypełnień i marginesów w bardzo wygodny sposób, dzięki ...
źródło
Bezwstydnie przyjęty przez Quickredfox .
aktualizacja
Zmieniono na,
parseInt(val, 10)
ponieważ jest szybszy niżparseFloat
.http://jsperf.com/number-vs-plus-vs-toint-vs-tofloat/20
źródło
Nie chcę tego robić, ale zrobiłem to, co może określać piksele na podstawie różnych wartości:
W ten sposób bierzemy pod uwagę wielkość i auto / dziedziczenie.
źródło
parseInt()
jest źle, szerokość lub wysokość mogą być zmiennoprzecinkowymi.