码迷,mamicode.com
首页 > Web开发 > 详细

如何给before和after伪元素设置js效果

时间:2015-12-04 06:24:52      阅读:178      评论:0      收藏:0      [点我收藏+]

标签:

前面的话

   无法直接给before和after伪元素设置js效果 

 

例子说明

  现在需要为(id为box,内容为"我是测试内容"的div)添加(:before内容为"前缀",颜色为红色的伪类)

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Document</title>
</head>
<body>
  <div id="box">我是测试内容</div>
  <script>
    var oBox = document.getElementById(‘box‘);
  </script> </body> </html>

 

解决办法

【方法一】动态嵌入CSS样式

  IE8-浏览器将<style>标签当作特殊的节点,不允许访问其子节点。IE10-浏览器支持使用styleSheet.cssText属性来设置样式。兼容写法如下:

<script>
function loadStyleString(css){
    var style = document.createElement("style");
    style.type = "text/css";
    try{
        style.appendChild(document.createTextNode(css));
    }catch(ex){
        style.styleSheet.cssText = css;
    }
    var head = document.getElementsByTagName(head)[0];
    head.appendChild(style);
}
loadStyleString("#box:before{content:‘前缀‘;color: red;}");
<script>

 

【方法二】添加自带伪类的类名

<style>
    .change:before{content: "前缀";color: red;}
</style>
<script>
    oBox.className = change;
</script> 

  [缺点]此方法无法控制伪元素里面的content属性的值

 

【方法三】利用setAttribute实现自定义content内容

<style>
  .change:before{content: attr(data-beforeData);color: red;}
</style>
<script>
    oBox.setAttribute(data-beforeData,前缀);
</script>

  [注意]此方法只可用setAttribute实现,经测试用dataset方法无效

 

【方法四】添加样式表

  firefox浏览器不支持addRule()方法,IE8-浏览器不支持insertRule()方法。兼容写法如下:

<script>
    function insertRule(sheet,ruleKey,ruleValue,index){
      return sheet.insertRule ? sheet.insertRule(ruleKey+ { + ruleValue + },index) : sheet.addRule(ruleKey,ruleValue,index);
  } 
    insertRule(document.styleSheets[0],#box:before,content:"前缀";color: red;,0)    
</script>

  [缺点]该方法必须有内部<style>或用<link>链接外部样式,否则若不存在样式表,则document.styleSheets为空列表,则报错

 

【方法五】修改样式表

  先使用方法四添加空的样式表,然后获取新生成的<style>并使用其innerHTML属性来修改样式表

<script>
function loadStyleString(css){
    var style = document.createElement("style");
    style.type = "text/css";
    try{
        style.appendChild(document.createTextNode(css));
    }catch(ex){
        style.styleSheet.cssText = css;
    }
    var head = document.getElementsByTagName(head)[0];
    head.appendChild(style);
}
loadStyleString(‘‘);
document.head.getElementsByTagName(style)[1].innerHTML = "#oBox:before{color: " + colorValue + ";}";
</script>

  [注意]只能使用getElementsByTagName(‘style‘)[1]的方法,经测验使用stylesheets[1]方法无效

 

DEMO

    <演示框>点击下列相应属性值可进行演示

如何给before和after伪元素设置js效果

标签:

原文地址:http://www.cnblogs.com/xiaohuochai/p/5018167.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!