Die Auswahl und Manipulation von CSS-pseudo-Elemente wie ::before und ::after mit Hilfe von jQuery
Gibt es eine Möglichkeit zum auswählen/Bearbeiten von CSS-pseudo-Elemente wie ::before
und ::after
(die alte version mit einem semi-colon) mit Hilfe von jQuery?
Beispielsweise mein stylesheet hat die folgende Regel:
.span::after{ content:'foo' }
Wie kann ich das ändern 'foo' auf 'bar' mit jQuery?
Verwandte: stackoverflow.com/questions/3743513/...
Ich habe etwas, dass sollte auch bei dir funktionieren: gist.github.com/yckart/5563717
Ich hasse solche Kommentare auf stackoverflow, die ich bin, zu schreiben (wo der Kommentator fragt, warum nicht Sie tun es einige komplette Gegenteil?), aber: irgendwann sollte man erkennen, code-design-Problem und ersetzen, dass die pseudo-element mit einem span oder so etwas. Ich denke, Sie wissen, was ich zeige auf.
Angenommen die Antwort ist ausgezeichnet. Obwohl, wenn Sie versuchen, zu erreichen, die folgenden Punkte, die Antwort wird nicht funktionieren: 1. ändern Stil :bevor Sie per JS. 2. änderung Inhalt :bevor Sie per JS Bitte Lesen Sie meine Antwort für Sie, wenn Sie es brauchen.
Siehe github.com/guest271314/pseudo/blob/master/pseudo.js
Ich habe etwas, dass sollte auch bei dir funktionieren: gist.github.com/yckart/5563717
Ich hasse solche Kommentare auf stackoverflow, die ich bin, zu schreiben (wo der Kommentator fragt, warum nicht Sie tun es einige komplette Gegenteil?), aber: irgendwann sollte man erkennen, code-design-Problem und ersetzen, dass die pseudo-element mit einem span oder so etwas. Ich denke, Sie wissen, was ich zeige auf.
Angenommen die Antwort ist ausgezeichnet. Obwohl, wenn Sie versuchen, zu erreichen, die folgenden Punkte, die Antwort wird nicht funktionieren: 1. ändern Stil :bevor Sie per JS. 2. änderung Inhalt :bevor Sie per JS Bitte Lesen Sie meine Antwort für Sie, wenn Sie es brauchen.
Siehe github.com/guest271314/pseudo/blob/master/pseudo.js
InformationsquelleAutor JBradwell | 2011-02-18
Du musst angemeldet sein, um einen Kommentar abzugeben.
Könnte man auch den Inhalt der pseudo-element mit einem data-Attribut, und verwenden Sie dann jQuery zu manipulieren, dass:
In HTML:
In jQuery:
CSS:
Wenn Sie verhindern möchten, dass der "andere text" von der Anzeige, Sie könnte kombinieren diese mit seucolega die Lösung wie diese:
In HTML:
In jQuery:
CSS:
+1 für
attr()
, schade, ich war nicht in der Lage, es mit anderen Eigenschaften alscontent
. DemoDas ist, weil kein browser in der Existenz umgesetzt hat
attr()
über CSS2 noch, während in CSS2 sichattr()
wurde nur definiert für diecontent
Eigenschaft.Aktualisiert link-Attribut für Verweise: w3.org/TR/css3-values/#attr-notation
href="http://caniuse.com/#feat=css-gencontent" >Wenn ein browser unterstützt
:before
es unterstütztattr()
in CSSInformationsquelleAutor Nick Kline
Obwohl Sie gerendert werden, die von den Browsern über CSS, als wären Sie wie andere echte DOM-Elemente pseudo-Elemente selbst sind nicht Teil des DOM, da die pseudo-Elemente, wie der name schon sagt, sind nicht wirklich Elemente, und daher können Sie nicht wählen Sie und Bearbeiten Sie direkt mit jQuery (oder alle JavaScript-APIs für diese Angelegenheit, auch nicht die Selectors API). Dies gilt für alle pseudo-Elemente, deren Stile, die Sie versuchen zu ändern, mit einem Skript, und nicht nur
::before
und::after
.Können Sie nur auf pseudo-element-Stile zur Laufzeit direkt über die CSSOM (denke
window.getComputedStyle()
), ist nicht ausgesetzt, indem Sie jQuery über.css()
eine Methode, die keine Unterstützung für pseudo-Elemente.Können Sie immer andere Wege finden, um es, wenn, zum Beispiel:
Anwendung der Stile der pseudo-Elemente an eine oder mehrere beliebige Klassen, dann der Wechsel zwischen den Klassen (siehe seucolega Antwort für ein schnelles Beispiel) — das ist die idiomatische Weise, wie man es macht Gebrauch von einfachen Selektoren (die pseudo-Elemente sind nicht), zu unterscheiden zwischen Elementen und element-Staaten, so wie Sie verwendet werden sollen,
Manipulieren der Stile angewendet werden, sagte pseudo-Elemente, durch ändern der Dokument-stylesheet, das ist viel mehr ein hack
InformationsquelleAutor BoltClock
Können Sie nicht wählen Sie die pseudo-Elemente in jQuery, denn Sie sind nicht Teil des DOM.
Aber Sie können fügen Sie eine bestimmte Klasse für das Vater-element und der Steuerung von pseudo-Elemente in CSS.
BEISPIEL
In jQuery:
CSS:
InformationsquelleAutor Gustavo Sousa
In der Linie von dem, was Christian schon sagt, Sie könnte auch tun:
Hier sollte Hinzugefügt werden, die ein id-Attribut, so kann das element ausgewählt und gelöscht werden, bevor eine neue Hinzugefügt wird. Wenn nicht, kann es kommen viele unnötige Stil-Knoten.
InformationsquelleAutor Ivan Chaer
Hier ist der Zugang :nach und :vor der Stil-Eigenschaften in css definierten:
InformationsquelleAutor Nedudi
WENN Sie wollen, zu manipulieren, das ::before oder ::after sudo Elemente vollständig über CSS könnte man es machen, JS. Siehe unten;
Beachten Sie, wie die
<style>
element hat eine ID, die Sie verwenden können, um es zu entfernen und fügen Sie es wieder, wenn Ihr Stil ändert sich dynamisch.Diese Weise, Ihr element ist der Stil genau, wie Sie es über CSS, mit Hilfe von JS.
InformationsquelleAutor
arbeiten, aber nicht sehr effiziente Möglichkeit ist das hinzufügen einer Regel, um das Dokument mit den neuen Inhalten und verweisen, mit der a-Klasse. je nachdem, was erforderlich ist, die Klasse braucht eine eindeutige id für jeden Wert in der content.
InformationsquelleAutor Christian
Hier ist der HTML:
Berechneten Stil auf "vorher" war
content: "VERIFY TO WATCH";
Hier ist meine zwei Zeilen jQuery, die die Idee, das hinzufügen einer extra Klasse, die speziell Referenz auf dieses element und dann Anhängen ein style-tag (mit ein !wichtig tag) zu änderungen der CSS des sudo-element den content-Wert:
$("span.play:eq(0)").addClass('G');
$('body').append("<style>.G:before{content:'NewText' !important}</style>");
InformationsquelleAutor Coyote
Danke an Euch alle!
ich konnte machen, was ich wollte 😀
http://jsfiddle.net/Tfc9j/42/
hier werfen Sie einen Blick
wollte ich die Deckkraft von einem äußeren div-anders zu sein als die Opazität des inneren div und das mit einem Klick ändern somwewhere 😉
Danke!
append
verwendenhtml
am besten verhindern+1. Das ist genau das, was ich suchte, ändern Sie die "Deckkraft" der div. Die anderen Antworten sind sehr gründlich, aber Sie alle richten Ihre Aufmerksamkeit auf Stile hinzufügen, nicht ändern bestehende. Danke!!!
Watch out: hier sind Sie anfügen, ein style-tag auf den Kopf jedes mal, wenn einer dieser Klicks behandelt wird. Ich würde code eine Möglichkeit, das alte zu entfernen, bevor ein neuer.
InformationsquelleAutor aimiliano
Dies ist nicht praktisch, da ich nicht schreiben diese für die Reale Welt verwendet, nur um Ihnen ein Beispiel dafür, was erreicht werden kann.
diese derzeit fügen Sie ein /oder fügt ein Style-element mit dem Attribut notwendig ist, die Auswirkungen auf das target-element ist nach dem Pseudo-element.
dies kann verwendet werden, als
und
als nach dem: und vor: pseudo-Elemente sind nicht direkt zugänglich durch den DOM ist es derzeit nicht möglich, Bearbeiten Sie die Spezifischen Werte der css-frei.
mein Weg war nur ein Beispiel und es ist nicht gut für die Praxis, Sie können es ändern, versuchen Sie, einige eigene tricks und machen es richtig für Reale Welt Verwendung.
also machen Sie Ihre eigenen Experimente mit diesem und anderen!
viele Grüße - Adarsh Hegde.
InformationsquelleAutor Adarsh Hegde
Warum das hinzufügen von Klassen oder Attributen, wenn Sie können, fügen Sie einfach ein
style
an-Kopf -InformationsquelleAutor Gaurav Aggarwal
Bin ich immer zusätzlich meine eigenen utils-Funktion, die wie folgt aussieht.
oder nutzen ES6-Features:
InformationsquelleAutor Orlandster
Gibt es viele Antworten hier, aber keine Antwort hilft zum Bearbeiten der css von
:before
oder:after
, nicht einmal das akzeptiert man.Hier ist, wie ich vorschlagen, es zu tun. Lets nehme an, dein HTML ist wie folgt:
Und Sie sind dann seine Einstellung :bevor Sie in CSS und Gestaltung es wie:
Bitte beachten Sie, dass ich auch gesetzt
content
Attribut im element selbst, so dass Sie können nehmen Sie es einfach später.Jetzt gibt es eine
button
anklicken, die Sie möchten, ändern Sie die Farbe :bevor Sie zu grün und seine font-size, um 30px. Erreichen Sie wie folgt vor:Definieren Sie eine css-Datei mit Ihren gewünschten Stil auf einige Klasse
.activeS
:Können Sie jetzt ändern :vor der Stil, indem die Klasse zu Ihrem :vor dem element wie folgt:
Wenn Sie nur wollen, um Inhalte von
:before
, es kann getan werden, wie:Letztendlich, wenn Sie wollen, um dynamisch ändern
:before
Inhalt von jQuery, kann Man dies wie folgt:Klick oben auf "changeBefore" - Taste wird die änderung
:before
Inhalt#something
in '22', das ist ein dynamischer Wert.Ich hoffe, es hilft
InformationsquelleAutor Learner
Habe ich eine jQuery-plugin zum hinzufügen von css-pseudo-Regeln, wie mit
.css()
für bestimmte Elemente.Verwendung:
InformationsquelleAutor BananaAcid
Jemand anderes kommentiert Anhängen an das head-element mit einem vollen Stil-element, und das ist nicht schlimm, wenn Sie nur tun es einmal, aber wenn Sie brauchen, um es zurücksetzen mehr als einmal werden Sie am Ende mit einer Tonne von Stil-Elementen. So zu verhindern, dass ich erstellt ein leeres style-element im Kopf mit einer id und ersetzen Sie die innerHTML es wie folgt aus:
Dann das JavaScript würde dann so Aussehen:
Nun, in meinem Fall brauchte ich diese um die Höhe der vor dem element basiert auf die Höhe der anderen und es wird sich ändern auf die Größe also mit dieser kann ich laufen
setHeight()
jedes mal, wenn das Fenster verkleinert und es wird ersetzen Sie die<style>
richtig.Hoffe, das hilft jemandem stecken, die versuchen, das gleiche zu tun.
InformationsquelleAutor zfb
Machte ich Gebrauch von Variablen definiert, die in
:root
innenCSS
zum ändern der:after
(das gleiche gilt für:before
) pseudo-element, insbesondere zum ändern derbackground-color
Wert für einen Stilanchor
definiert durch.sliding-middle-out:hover:after
und diecontent
Wert für eineanchor
(#reference
) in den folgenden demo, die generiert zufällige Farben durch die Verwendung von JavaScript/jQuery:HTML
CSS
JS/jQuery
attr()
außer incontent
ist, ist wirklich knapp. Sie überprüfen könnte caniuse.com für Sie.:root
- und css-Variablen-support ist besser, aber auch noch nicht so weit verbreitet, da die Unterstützung für Sie ist ziemlich neu. (überprüfen Sie auch die Unterstützung für Sie an caniuse.com)InformationsquelleAutor Riccardo Volpe