249 votes

Accéder au sélecteur css ":after" avec jQuery

J'ai le css suivant :

.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;
}

J'aimerais modifier la largeur des bordures supérieure, gauche et inférieure à l'aide de jQuery. Quel sélecteur dois-je utiliser pour accéder à cet élément ? J'ai essayé ce qui suit, mais cela ne semble pas fonctionner.

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

327voto

Blazemonger Points 39230

Vous ne pouvez pas manipuler :after car il ne fait techniquement pas partie du DOM et est donc inaccessible par tout JavaScript. Mais vous peut ajouter une nouvelle classe avec une nouvelle :after spécifié.

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 : alors qu'il est impossible de directement modifier le :after il existe des moyens de le lire et/ou de le remplacer en utilisant JavaScript. Voir "Manipulation des pseudo-éléments CSS à l'aide de jQuery (par exemple, :before et :after)" pour une liste complète de techniques.

70voto

r0mank Points 41

Vous pouvez ajouter un style pour :après comme un code html.
Par exemple :

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

10voto

unpezvivo Points 265

Si vous utilisez jQuery intégré after() avec une valeur vide, il créera un objet dynamique qui correspondra à votre :after Sélecteur CSS.

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

Voir le Documentation sur jQuery .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X