javascript 动态生成css代码的两种方法


Posted in Javascript onMarch 17, 2017

javascript 动态生成css代码的两种方法

有时候我们需要利用js来动态生成页面上style标签中的css代码,方法很直接,就是直接创建一个style元素,然后设置style元素里面的css代码,最后把它插入到head元素中。但有些兼容性问题我们需要解决。首先在符合w3c标准的浏览器中我们只需要把要插入的css代码作为一个文本节点插入到style元素中即可,而在IE中则需要利用style元素的styleSheet.cssText来解决。还需要注意的就是在有些版本IE中一个页面上style标签数量是有限制的,如果超过了会报错,需要考虑这点。

方法1:

给<style id="css">标签添加一个id名,在<script>标签中写

var oCss=document.getElementById("css");

oCss.innerHTML+="#box{width:200px;}";

这样就可以加上样式了。

方法2:

有时候我们需要利用js来动态生成页面上style标签中的css代码,方法很直接,就是直接创建一个style元素,然后设置style元素里面的css代码,最后把它插入到head元素中。但有些兼容性问题我们需要解决。首先在符合w3c标准的浏览器中我们只需要把要插入的css代码作为一个文本节点插入到style元素中即可,而在IE中则需要利用style元素的styleSheet.cssText来解决。还需要注意的就是在有些版本IE中一个页面上style标签数量是有限制的,如果超过了会报错,需要考虑这点。

下面直接放上代码,看注释说明。

function addCSS(cssText){
  var style = document.createElement('style'), //创建一个style元素
    head = document.head || document.getElementsByTagName('head')[0]; //获取head元素
  style.type = 'text/css'; //这里必须显示设置style元素的type属性为text/css,否则在ie中不起作用
  if(style.styleSheet){ //IE
    var func = function(){
      try{ //防止IE中stylesheet数量超过限制而发生错误
        style.styleSheet.cssText = cssText;
      }catch(e){

      }
    }
    //如果当前styleSheet还不能用,则放到异步中则行
    if(style.styleSheet.disabled){
      setTimeout(func,10);
    }else{
      func();
    }
  }else{ //w3c
    //w3c浏览器中只要创建文本节点插入到style元素中就行了
    var textNode = document.createTextNode(cssText);
    style.appendChild(textNode);
  }
  head.appendChild(style); //把创建的style元素插入到head中  
}

//使用
addCSS('#demo{ height: 30px; background:#f00;}');

当然这只是一个最基本的演示方法,实际运用中还需进行完善,比如把每次生成的css代码都插入到一个style元素中,这样在IE中就不会发生stylesheet数量超出限制的错误了。

总结:以上方法可以解决很多问题,有什么不懂的找我!

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

Javascript 相关文章推荐
javascript document.compatMode兼容性
Feb 23 Javascript
javascript学习之闭包分析
Dec 02 Javascript
Chosen 基于jquery的选择框插件使用方法
May 30 Javascript
javascript中sort()的用法实例分析
Jan 30 Javascript
jquery使用hide方法隐藏指定id的元素
Mar 30 Javascript
vue.js实现单选框、复选框和下拉框示例
Jul 18 Javascript
BootStrap selectpicker后台动态绑定数据的方法
Jul 28 Javascript
Node.js服务器开启Gzip压缩教程
Aug 11 Javascript
理解 JavaScript EventEmitter
Mar 29 Javascript
使用vue-router与v-if实现tab切换遇到的问题及解决方法
Sep 07 Javascript
JS实现可控制的进度条
Mar 25 Javascript
javascript实现支付宝滑块验证码效果
Jul 24 Javascript
AngularJS中$http使用的简单介绍
Mar 17 #Javascript
单击按钮发送验证码,出现倒计时的简单实例
Mar 17 #Javascript
jQuery Ajax前后端使用JSON进行交互示例
Mar 17 #Javascript
Bootstrap表格制作代码
Mar 17 #Javascript
鼠标经过出现气泡框的简单实例
Mar 17 #Javascript
angularJS之$http:与服务器交互示例
Mar 17 #Javascript
Bootstrap下拉菜单Dropdowns的实现代码
Mar 17 #Javascript
You might like
php获得文件扩展名三法
2006/11/25 PHP
php 无限级 SelectTree 类
2009/05/19 PHP
php学习之数据类型之间的转换介绍
2011/06/09 PHP
基于PHP异步执行的常用方式详解
2013/06/03 PHP
PHP base64编码后解码乱码的解决办法
2014/06/19 PHP
Yii2框架自定义类统一处理url操作示例
2019/05/25 PHP
php实现网页上一页下一页翻页过程详解
2019/06/28 PHP
PHP-FPM 设置多pool及配置文件重写操作示例
2019/10/02 PHP
Javascript弹出窗口的各种方法总结
2013/11/11 Javascript
JS实现从网页顶部掉下弹出层效果的方法
2015/08/06 Javascript
javascript html5移动端轻松实现文件上传
2020/03/27 Javascript
jquery 将当前时间转换成yyyymmdd格式的实现方法
2016/06/01 Javascript
jQuery 自定义下拉框(DropDown)附源码下载
2016/07/22 Javascript
js仿搜狐视频记录片列表展示效果
2020/05/30 Javascript
Vue.js:使用Vue-Router 2实现路由功能介绍
2017/02/22 Javascript
浅谈Emergence.js 检测元素可见性的 js 插件
2017/11/18 Javascript
微信小程序提交form操作示例
2018/12/30 Javascript
vue使用自定义指令实现拖拽
2021/01/29 Javascript
layui添加动态菜单与选项卡
2019/07/26 Javascript
使用layui监听器监听select下拉框,事件绑定不成功的解决方法
2019/09/28 Javascript
[59:48]DOTA2-DPC中国联赛 正赛 VG vs Magma BO3 第一场 1月26日
2021/03/11 DOTA
Python二维码生成库qrcode安装和使用示例
2014/12/16 Python
Python中static相关知识小结
2018/01/02 Python
flask-socketio实现WebSocket的方法
2018/07/31 Python
Python 3.8新特征之asyncio REPL
2019/05/28 Python
Python进阶:生成器 懒人版本的迭代器详解
2019/06/29 Python
python基于socket进行端口转发实现后门隐藏的示例
2019/07/25 Python
浅谈图像处理中掩膜(mask)的意义
2020/02/19 Python
玉兰油美国官网:OLAY美国
2018/10/25 全球购物
广州迈达威.net面试题目
2012/03/10 面试题
《埃及的金字塔》教学反思
2014/04/07 职场文书
财产公证书格式
2014/04/10 职场文书
德育标兵事迹材料
2014/08/24 职场文书
施工现场安全管理制度
2015/08/05 职场文书
HR在给员工开具离职证明时,需要注意哪些问题?
2019/07/03 职场文书
SQL 聚合、分组和排序
2021/11/11 MySQL