使用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 相关文章推荐
jQuery实现表单input中提示文字value随鼠标焦点移进移出而显示或隐藏的代码
Mar 21 Javascript
解析使用js判断只能输入数字、字母等验证的方法(总结)
May 14 Javascript
用IE重起计算机或者关机的示例代码
Mar 10 Javascript
js实现不重复导入的方法
Mar 02 Javascript
微信小程序之ES6与事项助手的功能实现
Nov 30 Javascript
常用的javascript设计模式
Jan 11 Javascript
Vue 获取数组键名的方法
Jun 21 Javascript
jQuery实现ajax的嵌套请求案例分析
Feb 16 jQuery
使用layui的router来进行传参的实现方法
Sep 06 Javascript
如何换个角度使用VUE过滤器详解
Sep 11 Javascript
使用uni-app开发微信小程序的实现
Dec 13 Javascript
浅析vue-router中params和query的区别
Dec 24 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数组是否为索引数组的实现方法
2013/06/13 PHP
PHP实现的增强性mhash函数
2015/05/27 PHP
PHP addslashes()函数讲解
2019/02/03 PHP
PHP全局使用Laravel辅助函数dd
2019/12/26 PHP
真正的JQuery.ajax传递中文参数的解决方法
2011/05/28 Javascript
json的前台操作和后台操作实现代码
2012/01/20 Javascript
html dom节点操作(获取/修改/添加或删除)
2014/01/23 Javascript
解决Vue不能检测数组或对象变动的问题
2018/02/24 Javascript
基于Angularjs-router动态改变Title值的问题
2018/08/30 Javascript
微信小程序保存多张图片的实现方法
2019/03/05 Javascript
webpack-mvc 传统多页面组件化开发详解
2019/05/07 Javascript
[01:24:34]2014 DOTA2华西杯精英邀请赛5 24 DK VS LGD
2014/05/25 DOTA
Python的requests网络编程包使用教程
2016/07/11 Python
python脚本爬取字体文件的实现方法
2017/04/29 Python
Python编程之序列操作实例详解
2017/07/22 Python
PyQt5每天必学之弹出消息框
2018/04/19 Python
Python对象属性自动更新操作示例
2018/06/15 Python
详解python爬虫系列之初识爬虫
2019/04/06 Python
在PyCharm中控制台输出日志分层级分颜色显示的方法
2019/07/11 Python
python带参数打包exe及调用方式
2019/12/21 Python
css3学习之2D转换功能详解
2016/12/23 HTML / CSS
利用CSS3实现进度条的两种姿势详解
2017/03/21 HTML / CSS
美国知名户外用品畅销中心:Sierra Trading Post
2016/07/19 全球购物
洛杉矶时尚女装系列:J.ING US
2019/03/17 全球购物
与世界上最好的跑步专业品牌合作:Fleet Feet
2019/03/22 全球购物
Amara德国:家居饰品、设计师品牌和豪华礼品
2019/05/20 全球购物
简历自荐信
2013/12/02 职场文书
玩具公司的创业计划书
2013/12/31 职场文书
《落花生》教学反思
2014/02/25 职场文书
优质服务演讲稿
2014/05/14 职场文书
基层党员对照检查材料
2014/08/25 职场文书
房屋租赁委托书范本
2014/10/04 职场文书
如何写好开幕词?
2019/06/24 职场文书
创业计划书之溜冰场
2019/10/25 职场文书
MySQL中InnoDB存储引擎的锁的基本使用教程
2021/05/26 MySQL
Python线程池与GIL全局锁实现抽奖小案例
2022/04/13 Python