2013-07-22 22 views
138

Tôi có css sau:Truy cập css ": sau khi" chọn với 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; 
} 

Tôi muốn thay đổi biên giới-chiều rộng của đầu, bên trái, và biên giới phía dưới sử dụng jQuery. Tôi chọn bộ chọn nào để truy cập phần tử này? Tôi đã thử những điều sau nhưng nó dường như không hoạt động.

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

Hãy xem câu trả lời này http://stackoverflow.com/questions/5041494/manipulating-css-pseudo-elements-using-jquery-eg-before-and-after – BigBadOwl

+2

Bạn không thể thông qua JQuery, nhưng bạn có thể với JavaScirpt (Truy cập Quy tắc CSS) http://stackoverflow.com/questions/15087736/change-the-divafter-border-right-color-by-jquery/15088868#15088868 –

+0

@AliBassam Những gì bạn vừa nói không có ý nghĩa gì cả. jQuery IS Javascript (Trên thực tế, một thư viện quy ước cho nó, nhưng tôi hy vọng bạn nhận được điểm). – Kroltan

Trả lời

196

Bạn không thể thao tác :after, bởi vì nó không phải là về mặt kỹ thuật là một phần của DOM và do đó không thể tiếp cận bởi bất kỳ JavaScript. Nhưng bạn có thể thêm một lớp mới với một số mới :after được chỉ định.

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: trong khi nó không thể trực tiếp sửa đổi nội dung :after, có nhiều cách để đọc và/hoặc ghi đè nó sử dụng JavaScript. Xem "Manipulating CSS pseudo-elements using jQuery (e.g. :before and :after)" để biết danh sách kỹ thuật toàn diện.

+0

điều này đã giúp tôi , cảm ơn! –

+0

Đây là một bài viết tuyệt vời với ba tùy chọn để chỉnh sửa các phần tử giả trong js. https://pankajparashar.com/posts/modify-pseudo-elements-css/ –

40

Bạn có thể thêm kiểu cho : sau giống như mã html.
Ví dụ:

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

Điều này rất hữu ích cho các thuộc tính động. Cảm ơn! –

+4

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

7

Nếu bạn sử dụng jQuery built-in after() với giá trị rỗng nó sẽ tạo ra một đối tượng năng động mà sẽ phù hợp với selector :after CSS của bạn.

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

Xem jQuery documentation.

+8

điều này không hoạt động, ý tưởng hay mặc dù – Pixelomo

+1

Điều này làm việc cho tôi trong Firefox, Chrome và Safari – sagesolutions

+2

Không hoạt động cho CSS nhưng cho phép tôi nhắm mục tiêu sự kiện nhấp vào: thẻ sau –

Các vấn đề liên quan