javascript如何获取伪元素的css属性

如何获取伪元素的CSS属性

伪元素是例如::after,::before等形式的css生成的元素。javascript中没有直接获取伪元素的选择器,但是有获取伪元素属性的方法。

window.getComputedStyle()

我们可以使用window.getComputedStyle()方法获取伪元素,再使用getPropertyValue()方法获取属性值。

语法:window.getComputedStyle(element[, pseudoElement])

element为伪元素所在的元素,pseudoElement为伪元素自身。

// 假如我们要获取的是class为test的::after伪元素,并获取到它的content值
const element = document.querySelector(".test");
const afterStyle = window.getComputedStyle(element, "::after")
const afterContent = afterStyle.getPropertyValue("content");

如果想要修改伪元素的属性怎么办呢?可以直接在取到的属性上赋值吗?答案是否定的,因为这里的style是计算出来的(看方法名就知道),所以是只读的,无法修改。我们并没有办法直接修改到伪元素的属性,只能通过获取styleSheet,再使用addRules(兼容IE)和insertRules(现代浏览器)方法来新增覆盖掉原来的伪元素样式。或者利用DOM原素的data-属性来修改。或者通过改变class类来改变伪元素。

// 修改styleSheet
document.styleSheets[0].addRule('.test::after','content: hellow'); // 支持IE
document.styleSheets[0].insertRule('.test::after { content: hellow }', 0); // 支持非IE的现代浏览器
<!-- CSS代码 -->
<style>
.test::after {
  content: attr(data-attr);
}
</style>

<!-- HTML代码 -->
<div class="test" data-attr="hellow"></div>

<!-- JacaScript代码 -->
<script>
const element = document.querySelector(".test");
element.setAttribute("data-attr", "hellow");
</script>