Доступ к CSS": after " селектор с jQuery [дубликат]
этот вопрос уже есть ответ здесь:
Выбор и управление псевдо-элементами CSS, такими как:: before и ::after с помощью jQuery
21 ответов
у меня есть следующий css:
.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;
}
Я хотел бы изменить ширину границы верхней, левой и нижней границы с помощью jQuery. Какой селектор я использую для доступа к этому стихия? Я попробовал следующий но она не работает.
$('.pageMenu .active:after').css(
{
'border-top-width': '22px',
'border-left-width': '22px',
'border-right-width': '22px'
}
)
3 ответов:
вы не можете манипулировать
:after, потому что он технически не является частью DOM и поэтому недоступен для любого JavaScript. Но ты можете добавить новый класс с новой:afterуказано.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');
обновление: пока это невозможно напрямую изменить
:afterсодержание, есть способы, чтобы прочитать и / или переопределить его с помощью JavaScript. Видеть " манипулирование псевдоэлементами CSS с помощью jQuery (например: before and: after)" для полного списка методов.
вы можете добавить стиль для :после подобный html-код.
например:var value = 22; body.append('<style>.wrapper:after{border-top-width: ' + value + 'px;}</style>');
Если вы используете встроенный jQuery
after()С пустым значением он создаст динамический объект, который будет соответствовать вашему:afterCSS-селектор.$('.active').after().click(function () { alert('clickable!'); });посмотреть документация jQuery.
Comments