Czy jest jakiś sposób wybierania / manipulowania pseudoelementami CSS, takimi jak ::before
i ::after
(oraz stara wersja z jednym średnikiem) za pomocą jQuery?
Na przykład mój arkusz stylów ma następującą zasadę:
.span::after{ content:'foo' }
Jak zmienić „foo” na „bar” za pomocą jQuery?
javascript
jquery
css
jquery-selectors
pseudo-element
JBradwell
źródło
źródło
Odpowiedzi:
Możesz także przekazać zawartość do pseudoelementu z atrybutem danych, a następnie użyć jQuery do manipulowania tym:
W HTML:
W jQuery:
W CSS:
Jeśli chcesz zapobiec wyświetlaniu się „innego tekstu”, możesz połączyć to z rozwiązaniem seucolega w następujący sposób:
W HTML:
W jQuery:
W CSS:
źródło
attr
funkcji przeciwkocontent
właściwości? Dziwi mnie, że nigdy o tym nie słyszałem ...attr()
, szkoda, że nie mogłem użyć go z innymi właściwościami niżcontent
. Demoattr()
poza CSS2, podczas gdy w CSS2attr()
została zdefiniowana tylko dla tejcontent
właściwości.:before
, obsługujeattr()
CSSMożna by pomyśleć, że byłoby to proste pytanie, na które można odpowiedzieć, ze wszystkim innym, co może zrobić jQuery. Niestety problem sprowadza się do problemu technicznego: css: after i: before reguły nie są częścią DOM i dlatego nie można ich zmienić za pomocą metod DOM jQuery.
Tam są sposoby, aby manipulować tych elementów przy użyciu JavaScript i / lub CSS obejścia; to, którego używasz, zależy od twoich dokładnych wymagań.
Zacznę od tego, co jest powszechnie uważane za „najlepsze” podejście:
1) Dodaj / usuń z góry określoną klasę
W tym podejściu stworzyłeś już klasę w swoim CSS w innym stylu
:after
lub:before
stylu. Umieść tę „nową” klasę później w arkuszu stylów, aby upewnić się, że zastępuje:Następnie możesz łatwo dodać lub usunąć tę klasę za pomocą jQuery (lub waniliowego JavaScript):
Pokaż fragment kodu
:before
lub:after
nie jest całkowicie dynamiczna2) Dodaj nowe style bezpośrednio do arkusza stylów dokumentu
Możliwe jest użycie JavaScript do dodawania stylów bezpośrednio do arkusza stylów dokumentu, w tym stylów
:after
i:before
. jQuery nie zapewnia wygodnego skrótu, ale na szczęście JS nie jest tak skomplikowany:Pokaż fragment kodu
.addRule()
a pokrewne.insertRule()
metody są dziś dość dobrze wspierane.Jako wariant możesz również użyć jQuery, aby dodać do dokumentu zupełnie nowy arkusz stylów, ale niezbędny kod nie jest bardziej przejrzysty:
Pokaż fragment kodu
Jeśli mówimy o „manipulowaniu” wartościami, a nie tylko ich dodawaniu, możemy również odczytać istniejące
:after
lub:before
style, stosując inne podejście:Pokaż fragment kodu
Możemy wymienić
document.querySelector('p')
z$('p')[0]
przy użyciu jQuery, dla nieco krótszy kod.3) Zmień inny atrybut DOM
Możesz także użyć
attr()
w swoim CSS do odczytania określonego atrybutu DOM. ( Jeśli przeglądarka obsługuje:before
, obsługujeattr()
również. ) Łącząc to zcontent:
starannie przygotowanym CSS, możemy zmieniać zawartość (ale nie inne właściwości, takie jak margines lub kolor):before
i:after
dynamicznie:JS:
Pokaż fragment kodu
Można to połączyć z drugą techniką, jeśli CSS nie może zostać przygotowany wcześniej:
Pokaż fragment kodu
attr
w CSS można stosować tylko do ciągów treści, a nie adresów URL lub kolorów RGBźródło
Chociaż są renderowane przez przeglądarki za pomocą CSS, tak jakby były jak inne prawdziwe elementy DOM, same pseudoelementy nie są częścią DOM, ponieważ pseudoelementy, jak sama nazwa wskazuje, nie są prawdziwymi elementami, a zatem nie można zaznacz i manipuluj nimi bezpośrednio za pomocą jQuery (lub dowolnych API JavaScript w tym zakresie, nawet API Selektorów ). Dotyczy to wszystkich pseudoelementów, których style próbujesz zmodyfikować za pomocą skryptu, a nie tylko
::before
i::after
.Możesz uzyskać dostęp do stylów pseudoelementów bezpośrednio w czasie wykonywania za pośrednictwem CSSOM (think
window.getComputedStyle()
), który nie jest ujawniony przez jQuery poza.css()
, metoda, która nie obsługuje również pseudoelementów.Zawsze możesz jednak znaleźć inne sposoby, na przykład:
Zastosowanie stylów do pseudoelementów jednej lub więcej dowolnych klas, a następnie przełączanie między klasami (patrz szybki odpowiedź seucolegi ) - jest to idiomatyczny sposób, ponieważ wykorzystuje on proste selektory (których pseudoelementami nie są), aby rozróżniać elementy i stany elementów, sposób, w jaki są przeznaczone do użycia
Manipulowanie stylami stosowanymi do wspomnianych pseudoelementów poprzez zmianę arkusza stylów dokumentu, co jest znacznie bardziej włamaniem
źródło
Nie możesz wybrać pseudoelementów w jQuery, ponieważ nie są one częścią DOM. Ale możesz dodać określoną klasę do elementu ojca i kontrolować jego pseudoelementy w CSS.
PRZYKŁAD
W jQuery:
W CSS:
źródło
Możemy również polegać na niestandardowych właściwościach (zwanych również zmiennymi CSS) w celu manipulowania pseudoelementem. W specyfikacji możemy przeczytać, że:
Biorąc to pod uwagę, chodzi o zdefiniowanie niestandardowej właściwości w elemencie, a pseudoelement po prostu odziedziczy ją; dzięki czemu możemy go łatwo modyfikować.
1) Używając stylu wbudowanego :
2) Korzystanie z CSS i klas
3) Za pomocą javascript
4) Korzystanie z jQuery
Może być również stosowany ze złożonymi wartościami:
Możesz zauważyć, że rozważam składnię, w
var(--c,value)
którejvalue
jest wartością domyślną, a także nazywaną wartością rezerwową.Z tej samej specyfikacji możemy odczytać:
I później:
Jeśli nie ustawimy niestandardowej właściwości LUB ustawimy ją na
initial
LUB zawiera ona niepoprawną wartość, wówczas zostanie użyta wartość zastępcza. Użycieinitial
może być pomocne na wypadek, gdybyśmy chcieli zresetować właściwość niestandardową do jej wartości domyślnej.Związane z
Jak przechowywać wartość odziedziczoną w niestandardowej właściwości CSS (znanej również jako zmienne CSS)?
Niestandardowe właściwości CSS (zmienne) dla modelu pudełkowego
Pamiętaj, że zmienne CSS mogą nie być dostępne we wszystkich przeglądarkach, które uważasz za istotne (np. IE 11): https://caniuse.com/#feat=css-variables
źródło
Zgodnie z tym, co sugeruje Christian, możesz także:
źródło
Oto sposób dostępu: po i: przed właściwościami stylu, zdefiniowanymi w css:
źródło
Jeśli chcesz manipulować elementami :: przed lub :: po sudo całkowicie za pomocą CSS, możesz to zrobić JS. Patrz poniżej;
Zauważ, jak
<style>
element ma identyfikator, którego możesz użyć, aby go usunąć i dołączyć do niego ponownie, jeśli styl zmieni się dynamicznie.W ten sposób twój element jest stylem dokładnie tak, jak chcesz za pomocą CSS, z pomocą JS.
źródło
jednym działającym, ale niezbyt wydajnym sposobem jest dodanie reguły do dokumentu z nową zawartością i odniesienie go do klasy. w zależności od potrzeb klasa może potrzebować unikalnego identyfikatora dla każdej wartości w treści.
źródło
Oto HTML:
Obliczony styl „przed” był
content: "VERIFY TO WATCH";
Oto moje dwa wiersze jQuery, które wykorzystują pomysł dodania dodatkowej klasy, aby konkretnie odwoływać się do tego elementu, a następnie dodania tagu stylu (z! Ważnym znacznikiem), aby zmienić CSS wartości zawartości elementu sudo:
$("span.play:eq(0)").addClass('G');
$('body').append("<style>.G:before{content:'NewText' !important}</style>");
źródło
Dziękuję wam wszystkim! udało mi się zrobić to, co chciałem: D http://jsfiddle.net/Tfc9j/42/ tutaj spójrz
chciałem, aby krycie zewnętrznego div różniło się od krycia wewnętrznego div, a ta zmiana gdzieś kliknięciem;) Dzięki!
źródło
append
,html
najlepiej jest unikaćMożesz utworzyć fałszywą właściwość lub użyć istniejącej i odziedziczyć ją w arkuszu stylów pseudoelementu.
Wygląda na to, że nie działa dla właściwości „content” :(
źródło
Nie jest to praktyczne, ponieważ nie napisałem tego do użytku w prawdziwym świecie, aby dać przykład tego, co można osiągnąć.
ten dodatek dodaje a / lub dołącza element Style, który zawiera niezbędne atrybuty, które będą miały wpływ na element docelowy po elemencie Pseudo.
można to wykorzystać jako
i
ponieważ po: i przed: pseudoelementy nie są dostępne bezpośrednio przez DOM, obecnie nie można swobodnie edytować określonych wartości css.
mój sposób był tylko przykładem i nie jest dobry do praktyki, możesz go zmodyfikować, wypróbować własne triki i dostosować do użytku w świecie rzeczywistym.
więc zróbcie własne eksperymenty z tym i innymi!
pozdrowienia - Adarsh Hegde.
źródło
Zawsze dodaję własną funkcję utils, która wygląda tak.
lub skorzystaj z funkcji ES6:
źródło
Po co dodawać klasy lub atrybuty, skoro można po prostu dołączyć
style
do nagłówkaźródło
Istnieje wiele odpowiedzi tutaj, ale żadna odpowiedź nie pomaga w manipulowaniu css
:before
lub:after
nawet tej zaakceptowanej.Oto jak proponuję to zrobić. Załóżmy, że Twój HTML wygląda następująco:
A potem ustawiasz jej: wcześniej w CSS i projektujesz tak:
Zauważ, że ustawiłem także
content
atrybut w samym elemencie, abyś mógł go później łatwo usunąć. Teraz jestbutton
kliknięcie, na którym chcesz zmienić kolor: przed na zielony i jego rozmiar czcionki na 30px. Możesz to osiągnąć w następujący sposób:Zdefiniuj css z wymaganym stylem w niektórych klasach
.activeS
:Teraz możesz zmienić: przed stylem, dodając klasę do elementu: przed w następujący sposób:
Jeśli chcesz tylko uzyskać treść
:before
, możesz to zrobić jako:Ostatecznie, jeśli chcesz dynamicznie zmieniać
:before
zawartość za pomocą jQuery, możesz to osiągnąć w następujący sposób:Kliknięcie powyższego przycisku „zmień przed” spowoduje zmianę
:before
zawartości#something
na „22”, co jest wartością dynamiczną.Mam nadzieję, że to pomoże
źródło
Wykorzystałem zmienne zdefiniowane w
:root
środku,CSS
aby zmodyfikować pseudoelement:after
(to samo dotyczy:before
) , w szczególności aby zmienić wartość stylu zdefiniowanego przez i wartość innej ( ) w poniższym demo, które generuje losowe kolory za pomocą JavaScript / jQuery:background-color
anchor
.sliding-middle-out:hover:after
content
anchor
#reference
HTML
CSS
JS / jQuery
źródło
attr()
wyjątku z wyjątkiemcontent
jest naprawdę rzadkie. Możesz to sprawdzić w caniuse.com.:root
Obsługa zmiennych css jest lepsza, ale nadal nie jest tak szeroko rozpowszechniona, ponieważ obsługa jest całkiem nowa. (sprawdź także wsparcie na caniuse.com)Stworzyłem wtyczkę jQuery, aby dodać pseudo reguły css, takie jak używanie
.css()
dla określonych elementów.stosowanie:
źródło
źródło
Możesz użyć mojej wtyczki do tego celu.
JQuery:
Wartości należy podać, tak jak w normalnej funkcji jQuery.css
Ponadto można również uzyskać wartość parametru pseudoelementu, tak jak w normalnej funkcji jQuery.css:
JS:
Pokaż fragment kodu
GitHub: https://github.com/yuri-spivak/managing-the-properties-of-pseudo-elements/
źródło
Ktoś inny skomentował dołączenie do elementu head z pełnym elementem stylu i nie jest to złe, jeśli robisz to tylko raz, ale jeśli musisz go zresetować więcej niż raz, otrzymasz mnóstwo elementów stylu. Aby nie dopuścić do tego, że utworzyłem w głowie pusty element stylu z identyfikatorem i zastąpiłem jego innerHTML w następujący sposób:
W takim razie JavaScript wygląda następująco:
Teraz w moim przypadku potrzebowałem tego, aby ustawić wysokość elementu przed w oparciu o wysokość innego, a zmieni się on przy zmianie rozmiaru, więc za pomocą tego mogę uruchomić za
setHeight()
każdym razem, gdy zmienia się rozmiar okna i zastąpi to<style>
poprawnie.Mam nadzieję, że to pomoże komuś, kto utknął próbując zrobić to samo.
źródło
Mam dla ciebie coś innego, co jest łatwe i skuteczne.
źródło