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