因为专注,所以专业
2005 - 2020

如何使用JS操纵伪元素

时间:2020-02-05 17:39:56    作者:八叔模板堂

有哪些伪元素

获取伪元素的属性值

// CSS代码
<style type="text/css">
#jadeId:before {
    content: "hello nicejade!";
    display: block;
    width: 100px;
    height: 100px;
    background: red;
}
</style>

// HTML代码
<div id="jadeId"></div>

// JS代码
<script type="text/javascript">
var myIdElement = document.getElementById("jadeId"),
    beforeStyle = window.getComputedStyle(myIdElement, ":before");
console.log(beforeStyle); // [CSSStyleDeclaration Object]
console.log(beforeStyle.width); // 100px
console.log(beforeStyle.getPropertyValue("width")); // 100px
console.log(beforeStyle.content); // "hello nicejade!"
</script>
对于float属性,如果使用键值访问,则不能直接使用getComputedStyle(element, null).float,而应该是cssFloat与styleFloat;
直接使用键值访问,则属性的键需要使用驼峰写法,如:style.backgroundColor;
使用getPropertyValue()方法不可以驼峰书写形式(不支持驼峰写法),例如:style.getPropertyValue(“border-top-color”);
getPropertyValue()方法在IE9+和其他现代浏览器中都支持;在IE6~8中,可以使用getAttribute()方法来代替;

更改伪元素的样式

方法1. 更换class来实现伪元素属性值的更改:

// CSS代码
.red::before { content: "red"; color: red; }
.green::before { content: "green"; color: green; }

// HTML代码
<div class="red">内容内容内容内容</div>

// jQuery代码
$(".red").removeClass('red').addClass('green');

方法2. 使用CSSStyleSheet的insertRule来为伪元素修改样式:

document.styleSheets[0].addRule('.red::before','color: green'); // 支持IE

document.styleSheets[0].insertRule('.red::before { color: green }', 0); // 支持非IE的现代浏览器

方法3. 在<head>标签中插入

var style = document.createElement("style");
document.head.appendChild(style); sheet = style.sheet;
sheet.addRule('.red::before','color: green'); // 兼容IE浏览器

heet.insertRule('.red::before { color: green }', 0); // 支持非IE的现代浏览器

// 亦可以使用 JQuery:
$('<style>.red::before{color:green}</style>').appendTo('head');


修改伪元素的content的属性值

方法1. 使用CSSStyleSheet的insertRule来为伪元素修改样式

var latestContent = "新修改的内容";
document.styleSheets[0].addRule('#jadeId::before','content: "' + latestContent + '"');  // 兼容IE浏览器

document.styleSheets[0].insertRule('#jadeId::before { content: "' + latestContent + '" }', 0); // 支持非IE的现代浏览器

方法2. 使用DOM元素的 data-* 属性来更改content的值

// CSS代码
.jadeId::before {
    content: attr(data-attr);
    color: red;
}

// HTML代码
<div class="jadeId" data-attr="jadeId">nciejade.io</div>

// JacaScript代码
$('.jadeId').attr('data-attr', '新修改的内容');


其他小建议

赞(0
免费拨打  111-1111-1111
免费拨打  111-1111-1111免费拨打 111-1111-1111
微信二维码
手机二维码
返回顶部
返回顶部返回顶部