使用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 相关文章推荐
学习ExtJS 访问容器对象
Oct 07 Javascript
Jquery Ajax学习实例 向页面发出请求,返回XML格式数据
Mar 14 Javascript
JQuery 学习技巧总结
May 21 Javascript
JavaScript实现的日期控件具体代码
Nov 18 Javascript
jquery如何获取复选框的值
Dec 12 Javascript
javascript浏览器兼容教程之事件处理
Jun 09 Javascript
JS实现页面内跳转的简单代码
Sep 03 Javascript
JS使用对象的defineProperty进行变量监控操作示例
Feb 02 Javascript
vue如何实现自定义底部菜单栏
Jul 01 Javascript
axios如何利用promise无痛刷新token的实现方法
Aug 27 Javascript
基于JavaScript实现猜数字游戏代码实例
Jul 30 Javascript
使用Vant完成通知栏Notify的提示操作
Nov 11 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
2款PHP无限级分类实例代码
2015/11/11 PHP
php实现websocket实时消息推送
2018/03/30 PHP
jquery ajax 登录验证实现代码
2009/09/23 Javascript
Extjs学习笔记之五 一个小细节renderTo和applyTo的区别
2010/01/07 Javascript
js 手机号码合法性验证代码集合
2012/09/29 Javascript
Javascript代码在页面加载时的执行顺序介绍
2013/05/03 Javascript
JS this作用域以及GET传输值过长的问题解决方法
2013/08/06 Javascript
javascript如何创建表格(javascript绘制表格的二种方法)
2013/12/10 Javascript
jQuery 无限级菜单的简单实例
2014/02/21 Javascript
JS往数组中添加项性能分析
2015/02/25 Javascript
js实现仿qq消息的弹出窗效果
2016/01/06 Javascript
RequireJS多页面应用实例分析
2016/06/29 Javascript
jQuery Ajax 实现在html页面实时显示用户登录状态
2016/12/30 Javascript
angularjs结合html5实现拖拽功能
2018/06/25 Javascript
详解微信小程序实现仿微信聊天界面(各种细节处理)
2019/02/17 Javascript
Javascript的this详解
2019/03/23 Javascript
vue 使用外部JS与调用原生API操作示例
2019/12/02 Javascript
vue如何在项目中调用腾讯云的滑动验证码
2020/07/15 Javascript
基python实现多线程网页爬虫
2015/09/06 Python
Python 编码处理-str与Unicode的区别
2016/09/06 Python
Python第三方库xlrd/xlwt的安装与读写Excel表格
2017/01/21 Python
200行自定义python异步非阻塞Web框架
2017/03/15 Python
Python迭代器与生成器基本用法分析
2018/07/26 Python
python GUI库图形界面开发之PyQt5滚动条控件QScrollBar详细使用方法与实例
2020/03/06 Python
CSS3中的transform属性进行2D和3D变换的基本用法
2016/05/12 HTML / CSS
KELLER SPORTS荷兰:在线订购最好的运动产品
2020/10/13 全球购物
生物化工工艺专业应届生求职信
2013/10/08 职场文书
企业安全生产月活动总结
2014/07/05 职场文书
镇人大副主席民主生活会对照检查材料思想汇报
2014/10/01 职场文书
2014年审计人员工作总结
2014/12/19 职场文书
秋收起义观后感
2015/06/11 职场文书
2016入党积极分子党课学习心得体会
2015/10/09 职场文书
先进个人主要事迹怎么写
2015/11/04 职场文书
六一儿童节致辞稿(3篇)
2019/07/11 职场文书
面试被问select......for update会锁表还是锁行
2021/11/11 MySQL
php实现自动生成验证码的实例讲解
2021/11/17 PHP