使用jQuery访问css“:after”选择器

时间:2013-07-22 13:34:14

标签: jquery css jquery-selectors

我有以下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 个答案:

答案 0 :(得分:253)

您无法操纵: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读取和/或覆盖它。有关完整的技术列表,请参阅 "Manipulating CSS pseudo-elements using jQuery (e.g. :before and :after)"

答案 1 :(得分:52)

您可以为之后的html代码添加样式 例如:

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

答案 2 :(得分:9)

如果您使用带有空值的jQuery内置after(),它将创建一个与:after CSS选择器匹配的动态对象。

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

请参阅jQuery documentation