在工作偶尔会遇到改变伪元素样式的场景,虽然也有很多解决方法,
    但是这个方法能让你像操作正常元素一样操作伪元素样式

    1. function ruleSelector(selector) {
    2. function uni(selector) {
    3. return selector.replace(/::/g, ':')
    4. }
    5. // es6
    6. return Array.from(document.styleSheets).reduce((a,b) => {
    7. return a.concat(Array.from(b.cssRules))
    8. }, []).filter(x => {
    9. return uni(x.selectorText) === uni(selector);
    10. })
    11. // es5
    12. // return Array.prototype.filter.call(Array.prototype.concat.apply([], Array.prototype.map.call(document.styleSheets, function (x) {
    13. // return Array.prototype.slice.call(x.cssRules);
    14. // })), function (x) {
    15. // return uni(x.selectorText) === uni(selector);
    16. // });
    17. }
    18. var toggle = false,
    19. pseudo = ruleSelector("ref::before").slice(-1);
    20. document.querySelector("article").onclick = function () {
    21. pseudo.forEach(function (rule) {
    22. if (toggle = !toggle)
    23. rule.style.color = "red";
    24. else
    25. rule.style.color = "black";
    26. });
    27. }