使用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自动判断浏览器分辨率的代码
Jan 28 Javascript
javascript 星级评分效果(手写)
Dec 24 Javascript
JS模块与命名空间的介绍
Mar 22 Javascript
javascript判断是手机还是电脑访问网页的简单实例分享
Jun 03 Javascript
JS之获取样式的简单实现方法(推荐)
Sep 13 Javascript
Ionic2系列之使用DeepLinker实现指定页面URL
Nov 21 Javascript
JavaScript正则表达式exec/g实现多次循环用法示例
Jan 17 Javascript
vue中七牛插件使用的实例代码
Jul 28 Javascript
小程序自定义组件实现城市选择功能
Jul 18 Javascript
详解Angularjs 自定义指令中的数据绑定
Jul 19 Javascript
JS拖拽排序插件Sortable.js用法实例分析
Feb 20 Javascript
JS实现九宫格拼图游戏
Jun 28 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
德生S2000南麂列岛台湾FM收听记录
2021/03/02 无线电
PHP 创建文件(文件夹)以及目录操作代码
2010/03/04 PHP
round robin权重轮循算法php实现代码
2016/05/28 PHP
php微信公众号开发(2)百度BAE搭建和数据库使用
2016/12/15 PHP
PHP中localeconv()函数的用法
2019/03/26 PHP
js快速排序的实现代码
2013/12/08 Javascript
js判断ie版本号的简单实现代码
2014/03/05 Javascript
jquery 自定义容器下雨效果可将下雨图标改为其他
2014/04/23 Javascript
全面了解JavaScript对象进阶
2016/07/19 Javascript
jQuery实现简单弹窗遮罩效果
2017/02/27 Javascript
详解如何在 vue 项目里正确地引用 jquery 和 jquery-ui的插件
2017/06/01 jQuery
vue-cli单页应用改成多页应用配置详解
2017/07/14 Javascript
vue动态路由实现多级嵌套面包屑的思路与方法
2017/08/16 Javascript
微信小程序使用audio组件播放音乐功能示例【附源码下载】
2017/12/08 Javascript
vue与vue-i18n结合实现后台数据的多语言切换方法
2018/03/08 Javascript
vue表单自定义校验规则介绍
2018/08/28 Javascript
JS/jQuery实现超简单的Table表格添加,删除行功能示例
2019/07/31 jQuery
一个手写的vue放大镜效果
2019/08/09 Javascript
浅谈layer弹出层按钮颜色修改方法
2019/09/11 Javascript
vue中使用极验验证码的方法(附demo)
2019/12/04 Javascript
[00:36]DOTA2上海特级锦标赛 LGD战队宣传片
2016/03/04 DOTA
Python中subprocess的简单使用示例
2015/07/28 Python
python中的编码知识整理汇总
2016/01/26 Python
Python3 Random模块代码详解
2017/12/04 Python
python3.6利用pyinstall打包py为exe的操作实例
2018/10/31 Python
django-rest-swagger对API接口注释的方法
2019/08/29 Python
详解Python中的format格式化函数的使用方法
2019/11/20 Python
利用python实现.dcm格式图像转为.jpg格式
2020/01/13 Python
Python发送邮件封装实现过程详解
2020/05/09 Python
欧洲最大的拼图游戏商店:JigsawPuzzle.co.uk
2018/07/04 全球购物
技术经理的自我评价范文
2013/12/03 职场文书
党员自我剖析材料
2014/08/31 职场文书
2014年财政局工作总结
2014/12/09 职场文书
2014年精神文明工作总结
2014/12/23 职场文书
小学音乐教师个人工作总结
2015/02/05 职场文书
安全事故隐患排查治理制度
2015/08/05 职场文书