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 相关文章推荐
Jquery跨域获得Json时invalid label错误的解决办法
Jan 11 Javascript
将input file的选择的文件清空的两种解决方案
Oct 21 Javascript
解决js函数闭包内存泄露问题的办法
Jan 25 Javascript
JS面试题---关于算法台阶的问题
Jul 26 Javascript
JavaScript-html标题滚动效果的简单实现
Sep 08 Javascript
JS实现微信弹出搜索框 多条件查询功能
Dec 13 Javascript
原生js实现秒表计时器功能
Feb 16 Javascript
js图片上传的封装代码
Aug 01 Javascript
Node.js爬取豆瓣数据实例分析
Mar 05 Javascript
vue 中滚动条始终定位在底部的方法
Sep 03 Javascript
详解如何更好的使用module vuex
Mar 27 Javascript
extjs4图表绘制之折线图实现方法分析
Mar 06 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 strtok()函数的优点分析
2010/03/02 PHP
php结合ajax实现赞、顶、踩功能实例
2014/05/12 PHP
Laravel框架学习笔记(二)项目实战之模型(Models)
2014/10/15 PHP
Yii2配置Nginx伪静态的方法
2017/05/05 PHP
laravel orm 关联条件查询代码
2019/10/21 PHP
在标题栏显示新消息提示,很多公司项目中用到这个方法
2011/11/04 Javascript
Jquery中request和request.form和request.querystring的区别
2015/11/26 Javascript
Angular2 组件交互实例详解
2017/08/24 Javascript
webpack的CSS加载器的使用
2018/09/11 Javascript
vue 使用element-ui中的Notification自定义按钮并实现关闭功能及如何处理多个通知
2019/08/17 Javascript
Vue中登录验证成功后保存token,并每次请求携带并验证token操作
2020/09/08 Javascript
[02:05]DOTA2完美大师赛趣味视频之看我表演
2017/11/18 DOTA
[50:22]完美盛典-2018年度红毯走秀
2018/12/16 DOTA
python实现socket客户端和服务端简单示例
2014/02/24 Python
django上传图片并生成缩略图方法示例
2017/12/11 Python
python中闭包Closure函数作为返回值的方法示例
2017/12/17 Python
python编程实现12306的一个小爬虫实例
2017/12/27 Python
Python单元测试unittest的具体使用示例
2018/12/17 Python
解决在Python编辑器pycharm中程序run正常debug错误的问题
2019/01/17 Python
Python list列表中删除多个重复元素操作示例
2019/02/27 Python
详解Python:面向对象编程
2019/04/10 Python
Python容器使用的5个技巧和2个误区总结
2019/09/26 Python
python爬取本站电子书信息并入库的实现代码
2020/01/20 Python
python爬虫实例之获取动漫截图
2020/05/31 Python
python交互模式基础知识点学习
2020/06/18 Python
Python 中如何写注释
2020/08/28 Python
10个python爬虫入门实例(小结)
2020/11/01 Python
Canvas多边形绘制的实现方法
2019/08/05 HTML / CSS
携程英文网站:Trip.com
2017/02/07 全球购物
美国旅游网站:Tours4Fun
2017/02/17 全球购物
学生党员公开承诺书
2014/05/28 职场文书
艾滋病宣传标语
2014/06/25 职场文书
幼儿园爱国卫生月活动总结
2014/06/30 职场文书
2019秋季运动会口号
2019/06/25 职场文书
ObjectMapper 如何忽略字段大小写
2021/06/29 Java/Android
SpringCloud Function SpEL注入漏洞分析及环境搭建
2022/04/08 Java/Android