Mam następujące zmienne JavaScript:
var fontsize = "12px"
var left= "200px"
var top= "100px"
Wiem, że mogę ustawić je dla mojego elementu iteracyjnie w następujący sposób:
document.getElementById("myElement").style.top=top
document.getElementById("myElement").style.left=left
Czy można je wszystkie połączyć naraz, coś takiego?
document.getElementById("myElement").style = allMyStyle
javascript
coding-style
Mircea
źródło
źródło
allMyStyle
w twoim przykładzie? Na początku masz listę pojedynczych zmiennych ...cssText
.Odpowiedzi:
Jeśli masz wartości CSS jako ciąg znaków i nie ma już innego CSS ustawionego dla elementu (lub nie przejmujesz się nadpisywaniem), skorzystaj z
cssText
właściwości :Jest to w pewnym sensie dobre, ponieważ pozwala uniknąć odmalowania elementu za każdym razem, gdy zmieniasz właściwość (zmieniasz je wszystkie „naraz”).
Z drugiej strony musisz najpierw zbudować ciąg.
źródło
display: block; position: absolute;
.Za pomocą Object.assign :
Daje to również możliwość łączenia stylów zamiast przepisywania stylu CSS.
Możesz także wykonać funkcję skrótu:
źródło
document.querySelector('html').style = Object.assign({}, document.querySelector('html').style, { color: 'red'})
ale nic się nie dzieje.Object.assign(document.querySelector('html').style, { color: 'red' });
... Upewnij się, że styl nie jest nadpisany w dolnym elemencie. Jest to bardzo prawdopodobne, gdy używasz go nahtml
elemencie.@Mircea: Bardzo łatwo jest ustawić wiele stylów dla elementu w pojedynczej instrukcji. Nie wpływa to na istniejące właściwości i pozwala uniknąć złożoności korzystania z pętli lub wtyczek.
UWAŻAJ: Jeśli później użyjesz tej metody do dodania lub zmiany właściwości stylu, poprzednie właściwości ustawione za pomocą „setAttribute” zostaną usunięte.
źródło
removeAttribute
może się przydać tym, którzy myślą osetAttribute
zresetowaniu styluZrób funkcję, aby się tym zająć i przekaż parametry wraz ze stylami, które chcesz zmienić.
i nazwij to tak
dla wartości właściwości wewnątrz właściwościObiekt można użyć zmiennych.
źródło
Biblioteka JavaScript pozwala robić te rzeczy bardzo łatwo
jQuery
Obiekt i pętla for-in
Lub, o wiele bardziej elegancka metoda, to podstawowy obiekt i pętla for
źródło
ustaw wiele właściwości stylu css w JavaScript
lub
Przykład:
źródło
Właśnie się tu natknąłem i nie rozumiem, dlaczego do osiągnięcia tego jest tak dużo kodu.
Dodaj swój kod CSS jako ciąg.
źródło
Możesz mieć indywidualne klasy w swoich plikach css, a następnie przypisać nazwę klasy do swojego elementu
lub możesz przeglądać właściwości stylów jako -
źródło
Nie sądzę, że jest to możliwe jako takie.
Ale możesz utworzyć obiekt na podstawie definicji stylu i po prostu przejść przez nie.
Aby dalej się rozwijać, utwórz dla niego funkcję:
źródło
Używając zwykłego Javascript, nie można ustawić wszystkich stylów jednocześnie; musisz użyć pojedynczych linii dla każdej z nich.
Nie musisz jednak powtarzać
document.getElementById(...).style.
kodu w kółko; utwórz zmienną obiektową, aby się do niej odwoływała, a sprawisz, że kod będzie znacznie bardziej czytelny:...itp. Znacznie łatwiejszy do odczytania niż twój przykład (i szczerze mówiąc, równie łatwy do odczytania jak alternatywa jQuery).
(jeśli JavaScript został poprawnie zaprojektowany, mógłbyś również użyć
with
słowa kluczowego, ale najlepiej zostawić to w spokoju, ponieważ może to powodować pewne nieprzyjemne problemy z przestrzenią nazw)źródło
cssText
.cssText
do ustawiania wartości wbudowanego arkusza stylów. Jednak jeśli masz również klasy lub chcesz tylko zastąpić niektóre wartości, ale nie wszystkie, użycie tego może być dość trudnecssText
. Masz rację; możesz to zrobić, ale odradzam to w większości przypadków użycia.obj.top
lub jedynieobj.style.color
ustawia wartość wbudowanego arkusza stylów. I tak, w mojej odpowiedzi powiedziałem, że należy nadpisać wartości ... to zależy od kontekstu, czy jest użyteczny czy nie.Najlepszym rozwiązaniem może być utworzenie funkcji, która sama określa style:
Pamiętaj, że nadal będziesz musiał używać nazw właściwości zgodnych z javascript (stąd
backgroundColor
)źródło
Zobacz dla ... w
Przykład:
źródło
To jest stary wątek, więc pomyślałem, że dla każdego, kto szuka nowoczesnej odpowiedzi, sugeruję użycie Object.keys ();
źródło
Istnieją scenariusze, w których użycie CSS wraz z javascript może mieć większy sens w przypadku takiego problemu. Spójrz na następujący kod:
To po prostu przełącza się między klasami CSS i rozwiązuje tak wiele problemów związanych z nadpisywaniem stylów. Sprawia nawet, że Twój kod jest bardziej uporządkowany.
źródło
Możesz napisać funkcję, która będzie ustawiać deklaracje indywidualnie, aby nie zastępować żadnych istniejących deklaracji, których nie dostarczasz. Załóżmy, że masz tę listę parametrów obiektu deklaracji:
Możesz napisać funkcję, która wygląda następująco:
która pobiera
element
iobject
listę właściwości deklaracji stylu do zastosowania do tego obiektu. Oto przykład użycia:Pokaż fragment kodu
źródło
Myślę, że jest to bardzo prosty sposób w odniesieniu do wszystkich powyższych rozwiązań:
źródło
Użyj
CSSStyleDeclaration.setProperty()
metody wObject.entries
obiekcie stylów.Dzięki temu możemy również ustawić priorytet („ważny”) dla właściwości CSS.
Użyjemy nazw właściwości CSS „hypen-case”.
źródło
Czy podany poniżej parametr innerHtml jest prawidłowy
źródło
Dzięki ES6 + możesz także używać backticków, a nawet kopiować css bezpośrednio skądś:
źródło
źródło
Możemy dodać funkcję stylów do prototypu węzła:
Następnie po prostu wywołaj metodę stylów na dowolnym węźle:
Zachowa wszelkie istniejące style i nadpisze wartości obecne w parametrze obiektu.
źródło