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 相关文章推荐
AngularJS入门知识之MVW类框架的编程思想探讨
Dec 08 Javascript
jquery+ajax验证不通过也提交表单问题处理
Dec 12 Javascript
JS如何实现文本框随文本的长度而增长
Jul 30 Javascript
使用JS轻松实现ionic调用键盘搜索功能(超实用)
Sep 06 Javascript
基于bootstrap-datetimepicker.js不支持IE8的快速解决方法
Nov 07 Javascript
JS实现无缝循环marquee滚动效果
May 22 Javascript
BootStrap表单控件之文本域textarea
May 23 Javascript
Vue使用vue-cli创建项目
Sep 01 Javascript
vue router下的html5 history在iis服务器上的设置方法
Oct 18 Javascript
JS将网址url转化为JSON格式的方法
Jul 02 Javascript
js时间戳转yyyy-MM-dd HH-mm-ss工具类详解
Apr 30 Javascript
JS实现利用闭包判断Dom元素和滚动条的方向示例
Aug 26 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
BBS(php &amp; mysql)完整版(五)
2006/10/09 PHP
深入理解PHP原理之Session Gc的一个小概率Notice
2011/04/12 PHP
PHP substr 截取字符串出现乱码问题解决方法[utf8与gb2312]
2011/12/16 PHP
详解cookie验证的php应用的一种SSO解决办法
2017/10/20 PHP
PHP实现简易计算器功能
2020/08/28 PHP
随窗体滑动的小插件sticky源码
2013/06/21 Javascript
利用div+jquery自定义滚动条样式的2种方法
2013/07/18 Javascript
JQuery调用WebServices的方法和4个实例
2014/05/06 Javascript
基于jQuery实现的文字按钮表单特效整理
2014/12/07 Javascript
实例解析jQuery中proxy()函数的用法
2016/05/24 Javascript
jQuery简单实现仿京东分类导航层效果
2016/06/07 Javascript
JS前端笔试题分析
2016/12/19 Javascript
Angular2 组件交互实例详解
2017/08/24 Javascript
Vue.js搭建移动端购物车界面
2020/06/28 Javascript
VUE+Element UI实现简单的表格行内编辑效果的示例的代码
2018/10/31 Javascript
微信小程序新手教程之启动页的重要性
2019/03/03 Javascript
Vue运用transition实现过渡动画
2019/05/06 Javascript
Vue实例的对象参数options的几个常用选项详解
2019/11/08 Javascript
微信小程序实现横向滚动导航栏效果
2019/12/12 Javascript
在Python中使用SQLite的简单教程
2015/04/29 Python
python3序列化与反序列化用法实例
2015/05/26 Python
利用PyInstaller将python程序.py转为.exe的方法详解
2017/05/03 Python
浅谈Python中带_的变量或函数命名
2017/12/04 Python
Python批量生成特定尺寸图片及图画任意文字的实例
2019/01/30 Python
Python中常用的8种字符串操作方法
2019/05/06 Python
基于Python打造账号共享浏览器功能
2019/05/30 Python
django框架CSRF防护原理与用法分析
2019/07/22 Python
在django admin中添加自定义视图的例子
2019/07/26 Python
Python模块_PyLibTiff读取tif文件的实例
2020/01/13 Python
Python基于Socket实现简易多人聊天室的示例代码
2020/11/29 Python
学前教育教师求职自荐信
2013/09/22 职场文书
生物技术毕业生自荐信
2013/10/23 职场文书
个人房屋转让协议书范本
2014/10/26 职场文书
销售经理工作检讨书
2015/02/19 职场文书
Nginx配置80端口访问8080及项目名地址方法解析
2021/03/31 Servers
golang判断key是否在map中的代码
2021/04/24 Golang