使用javascript插入样式


Posted in Javascript onMarch 14, 2016

一、用javascript插入<style>样式
有时候我们需要利用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数量超出限制的错误了。

封装:

var importStyle=function importStyle(b){var a=document.createElement("style"),c=document;c.getElementsByTagName("head")[0].appendChild(a);if(a.styleSheet){a.styleSheet.cssText=b}else{a.appendChild(c.createTextNode(b))}};

importStyle('h1 { background: red; }');//调用

seajs封装

seajs.importStyle=function importStyle(b){var a=document.createElement("style"),c=document;c.getElementsByTagName("head")[0].appendChild(a);if(a.styleSheet){a.styleSheet.cssText=b}else{a.appendChild(c.createTextNode(b))}};

二、javascript插入<link>样式
在<head>中使用<link>标签引入一个外部样式文件,这个比较简单,各个主流浏览器也不存在兼容性问题:
function includeLinkStyle(url) {
var link = document.createElement(“link”);
link.rel = “stylesheet”;
link.type = “text/css”;
link.href = url;
document.getElementsByTagName(“head”)[0].appendChild(link);
}

includeLinkStyle(“http://css.xxx.com/home/css/reset.css?v=20101227”);

以上就是本文的全部内容,希望对大家的学习有所帮助。

Javascript 相关文章推荐
js实现精美的图片跟随鼠标效果实例
May 16 Javascript
JQuery实现样式设置、追加、移除与切换的方法
Jun 11 Javascript
JavaScript简单修改窗口大小的方法
Aug 03 Javascript
JS封装的自动创建表格的实现代码
Jun 15 Javascript
jquery.serialize() 函数语法及简单实例
Jul 08 Javascript
JS提示:Uncaught SyntaxError: Unexpected token ILLEGAL错误的解决方法
Aug 19 Javascript
jQuery文字轮播特效
Feb 12 Javascript
Iscrool下拉刷新功能实现方法(推荐)
Jun 26 Javascript
js 发布订阅模式的实例讲解
Sep 10 Javascript
Scala解析Json字符串的实例详解
Oct 11 Javascript
ES6 proxy和reflect的使用方法与应用实例分析
Feb 15 Javascript
vue中使用router全局守卫实现页面拦截的示例
Oct 23 Javascript
jQuery实现百叶窗焦点图动画效果代码分享(附源码下载)
Mar 14 #Javascript
javascript实现数组去重的多种方法
Mar 14 #Javascript
javascript实现PC网页里的拖拽效果
Mar 14 #Javascript
Jquery实现简单的轮播效果(代码管用)
Mar 14 #Javascript
node模块机制与异步处理详解
Mar 13 #Javascript
JS中创建函数的三种方式及区别
Mar 13 #Javascript
使用jQuery操作HTML的table表格的实例解析
Mar 13 #Javascript
You might like
PHP中10个不常见却非常有用的函数
2010/03/21 PHP
PHP定时任务获取微信access_token的方法
2016/10/10 PHP
PHP中for循环与foreach的区别
2017/03/06 PHP
PHP实现登录验证码校验功能
2018/05/17 PHP
原生js ActiveXObject获取execl里面的值
2013/11/01 Javascript
浅谈javascript六种数据类型以及特殊注意点
2013/12/20 Javascript
JavaScript的各种常见函数定义方法
2014/09/16 Javascript
jQuery实现感应鼠标动画效果自动伸长的输入框实例
2015/02/24 Javascript
BootStrap日期控件在模态框中选择时间下拉菜单无效的原因及解决办法(火狐下不能点击)
2016/08/18 Javascript
ng-options和ng-checked在表单中的高级运用(推荐)
2017/01/21 Javascript
jQuery中hover方法搭配css的hover选择器,实现选中元素突出显示方法
2017/05/08 jQuery
vue proxyTable 接口跨域请求调试的示例
2017/09/12 Javascript
改变vue请求过来的数据中的某一项值的方法(详解)
2018/03/08 Javascript
vue+jquery+lodash实现滑动时顶部悬浮固定效果
2018/04/28 jQuery
详解vue中axios的封装
2018/07/18 Javascript
小程序实现页面顶部选项卡效果
2018/11/06 Javascript
Angular6新特性之Angular Material
2018/12/28 Javascript
vue 接口请求地址前缀本地开发和线上开发设置方式
2020/08/13 Javascript
在Python中使用HTMLParser解析HTML的教程
2015/04/29 Python
Python使用Paramiko模块编写脚本进行远程服务器操作
2016/05/05 Python
Python 模拟购物车的实例讲解
2017/09/11 Python
Python3生成手写体数字方法
2018/01/30 Python
python实现自动登录
2018/09/17 Python
python 导入数据及作图的实现
2019/12/03 Python
TensorFlow 读取CSV数据的实例
2020/02/05 Python
Python3+Django get/post请求实现教程详解
2021/02/16 Python
荷兰皇家航空公司中国官网:KLM中国
2017/12/13 全球购物
印度在线购买电子产品网站:Croma
2020/01/02 全球购物
会计系中文个人求职信
2013/12/24 职场文书
党风廉政承诺书
2014/03/27 职场文书
农民工工资发放承诺书
2014/03/31 职场文书
初中作文评语集锦
2014/12/25 职场文书
2015年助残日活动总结
2015/03/27 职场文书
《所见》教学反思
2016/02/23 职场文书
《植物妈妈有办法》教学反思
2016/02/23 职场文书
Mysql调整优化之四种分区方式以及组合分区
2022/04/13 MySQL