2013-07-22 20 views
138

Ho la seguente CSS:Accedere alla css ": dopo" Selettore con jQuery

.pageMenu .active::after { 
    content: ''; 
    margin-top: -6px; 
    display: inline-block; 
    width: 0px; 
    height: 0px; 
    border-top: 14px solid white; 
    border-left: 14px solid transparent; 
    border-bottom: 14px solid white; 
    position: absolute; 
    right: 0; 
} 

mi piacerebbe modificare il bordo-larghezza della parte superiore, a sinistra, e bordo inferiore utilizzando jQuery. Quale selettore usare per accedere a questo elemento? Ho provato quanto segue ma non sembra funzionare.

$('.pageMenu .active:after').css(
     { 
      'border-top-width': '22px', 
      'border-left-width': '22px', 
      'border-right-width': '22px' 
     } 
    ) 
+1

Dai un'occhiata a questa risposta http://stackoverflow.com/questions/5041494/manipulating-css-pseudo-elements-using-jquery-eg-before-and-after – BigBadOwl

+2

Non puoi farlo tramite JQuery, ma tu può con JavaScirpt (Accesso alle regole CSS) http://stackoverflow.com/questions/15087736/change-the-divafter-border-right-color-by-jquery/15088868#15088868 –

+0

@AliBassam Quello che hai appena detto non ha senso. jQuery IS Javascript (In realtà, una libreria di convenzioni per questo, ma spero che tu abbia capito il punto). – Kroltan

risposta

196

Non è possibile manipolare :after, perché non è tecnicamente parte del DOM e quindi non è accessibile in qualsiasi JavaScript. Ma tu puoi aggiungere una nuova classe con un nuovo specificato.

CSS:

.pageMenu .active.changed:after { 
/* this selector is more specific, so it takes precedence over the other :after */ 
    border-top-width: 22px; 
    border-left-width: 22px; 
    border-right-width: 22px; 
} 

JS:

$('.pageMenu .active').toggleClass('changed'); 

UPDATE: mentre è impossibile direttamente modificare il contenuto :after, ci sono modi per leggere e/o di esclusione usando JavaScript. Vedi "Manipulating CSS pseudo-elements using jQuery (e.g. :before and :after)" per un elenco completo di tecniche.

+0

questo mi ha aiutato , Grazie! –

+0

Ecco un grande articolo con tre opzioni per la modifica di pseudo-elementi in js. https://pankajparashar.com/posts/modify-pseudo-elements-css/ –

40

È possibile aggiungere stile per : dopo un codice HTML simile.
Ad esempio:

var value = 22; 
body.append('<style>.wrapper:after{border-top-width: ' + value + 'px;}</style>'); 
+1

Questo è utile per le proprietà dinamiche. Grazie! –

+4

In jQuery: '$ (" ") .appendTo (" head ")' – SuN

7

Se si utilizza jQuery integrato after() con valore vuoto si creerà un oggetto dinamico che corrispondono alla tua selettore :after CSS.

$('.active').after().click(function() { 
    alert('clickable!'); 
}); 

Vedere le jQuery documentation.

+8

questo non funziona, buona idea anche se – Pixelomo

+1

Funziona per me in Firefox, Chrome e Safari – sagesolutions

+2

Non funziona per CSS ma mi consente di indirizzare l'evento click su un:: tag –