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 相关文章推荐
js replace替换所有匹配的字符串
Feb 13 Javascript
jquery模拟LCD 时钟的html文件源代码
Jun 16 Javascript
jQuery控制cookie过期时间的方法
Apr 07 Javascript
JS+CSS实现带小三角指引的滑动门效果
Sep 22 Javascript
Bootstrap每天必学之标签与徽章
Nov 27 Javascript
JS实现支持Ajax验证的表单插件
Mar 24 Javascript
详谈JS中数组的迭代方法和归并方法
Aug 11 Javascript
vue slot 在子组件中显示父组件传递的模板
Mar 02 Javascript
vue-cli3中vue.config.js配置教程详解
May 29 Javascript
微信小程序 调用远程接口 给全局数组赋值代码实例
Aug 13 Javascript
Vue实现多标签选择器
Nov 28 Javascript
JavaScript实现网页留言板功能
Nov 23 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结合飞信 免费天气预报短信
2009/05/07 PHP
Linux下将excel数据导入到mssql数据库中的方法
2010/02/08 PHP
PHP中使用数组实现堆栈数据结构的代码
2012/02/05 PHP
神盾加密解密教程(三)PHP 神盾解密工具
2014/06/08 PHP
PHP中iconv函数转码时截断字符问题的解决方法
2015/01/21 PHP
Phpstorm+Xdebug断点调试PHP的方法
2018/05/14 PHP
Sample script that deletes a SQL Server database
2007/06/16 Javascript
web前端开发也需要日志
2010/12/09 Javascript
jquery 获取标签名(tagName)示例代码
2013/07/11 Javascript
JavaScript Promise启示录
2014/08/12 Javascript
yui3的AOP(面向切面编程)和OOP(面向对象编程)
2015/05/01 Javascript
js带闹铃功能的倒计时代码
2016/09/29 Javascript
浅谈js控制li标签排序问题 js调用php函数的方法
2016/10/16 Javascript
微信小程序 获取相册照片实例详解
2016/11/16 Javascript
javascript基本数据类型及类型检测常用方法小结
2016/12/14 Javascript
微信小程序 使用canvas制作K线实例详解
2017/01/12 Javascript
Jquery uploadify 多余的Get请求(404错误)的解决方法
2017/01/26 Javascript
Bootstrap模态框插件使用详解
2017/05/11 Javascript
详解Vue项目中出现Loading chunk {n} failed问题的解决方法
2018/09/14 Javascript
深入理解Vue keep-alive及实践总结
2019/08/21 Javascript
Vue(定时器)解决mounted不能获取到data中的数据问题
2020/07/30 Javascript
Vue 防止短时间内连续点击后多次触发请求的操作
2020/11/11 Javascript
[03:26]《DAC最前线》之EG经理自述DOTA2经历
2015/02/02 DOTA
Python绘制3d螺旋曲线图实例代码
2017/12/20 Python
使用pyinstaller打包PyQt4程序遇到的问题及解决方法
2019/06/24 Python
python3使用GUI统计代码量
2019/09/18 Python
python闭包、深浅拷贝、垃圾回收、with语句知识点汇总
2020/03/11 Python
pytorch加载语音类自定义数据集的方法教程
2020/11/10 Python
移动web模拟客户端实现多方框输入密码效果【附代码】
2016/03/25 HTML / CSS
澳大利亚的奢侈品牌:Oroton
2016/08/26 全球购物
C/C++程序员常见面试题二
2015/11/19 面试题
化工专业个人的求职信范文
2013/11/28 职场文书
三八活动策划方案
2014/08/17 职场文书
公证委托书格式
2014/09/13 职场文书
党员对十八届四中全会的期盼思想汇报范文
2014/10/17 职场文书
初中生物教学反思
2016/02/20 职场文书