使用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 10 Javascript
IE下写xml文件的两种方式(fso/saveAs)
Aug 05 Javascript
javascript框架设计读书笔记之字符串的扩展和修复
Dec 02 Javascript
跟我学习javascript的严格模式
Nov 16 Javascript
angularjs实现多张图片上传并预览功能
Feb 24 Javascript
iOS + node.js使用Socket.IO框架进行实时通信示例
Apr 14 Javascript
基于webpack 实用配置方法总结
Sep 28 Javascript
第一个Vue插件从封装到发布
Nov 22 Javascript
微信小程序实现简易table表格
Jun 19 Javascript
《javascript设计模式》学习笔记七:Javascript面向对象程序设计组合模式详解
Apr 08 Javascript
解决vue侦听器watch,调用this时出现undefined的问题
Oct 30 Javascript
利用javaScript处理常用事件详解
Apr 14 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
各种战术和打法的原创者
2020/03/04 星际争霸
十天学会php之第四天
2006/10/09 PHP
php采用ajax数据提交post与post常见方法总结
2014/11/10 PHP
PHP中字符串长度的截取用法示例
2017/01/12 PHP
PHP实现将几张照片拼接到一起的合成图片功能【便于整体打印输出】
2017/11/14 PHP
JS控制阿拉伯数字转为中文大写示例代码
2013/09/04 Javascript
js动态添加onclick事件可传参数与不传参数
2014/07/29 Javascript
javascript图片滑动效果实现
2021/01/28 Javascript
封装好的javascript前端分页插件pagination
2016/01/04 Javascript
JavaScript事件类型中UI事件详解
2016/01/14 Javascript
浅谈JS原生Ajax,GET和POST
2016/06/08 Javascript
Vue.js 2.0 和 React、Augular等其他前端框架大比拼
2016/10/08 Javascript
AngularJS中watch监听用法分析
2016/11/04 Javascript
JavaScript交换两个变量值的七种解决方案
2016/12/01 Javascript
解决bootstrap中使用modal加载kindeditor时弹出层文本框不能输入的问题
2017/06/05 Javascript
200行代码实现blockchain 区块链实例详解
2018/03/14 Javascript
.vue文件 加scoped 样式不起作用的解决方法
2018/05/28 Javascript
Python批量重命名同一文件夹下文件的方法
2015/05/25 Python
django开发教程之利用缓存文件进行页面缓存的方法
2017/11/10 Python
python通过elixir包操作mysql数据库实例代码
2018/01/31 Python
Python去除字符串前后空格的几种方法
2019/03/04 Python
Python如何爬取实时变化的WebSocket数据的方法
2019/03/09 Python
基于python实现的百度新歌榜、热歌榜下载器(附代码)
2019/08/05 Python
pytorch 获取层权重,对特定层注入hook, 提取中间层输出的方法
2019/08/17 Python
Python根据指定文件生成XML的方法
2020/06/29 Python
python中tkinter窗口位置\坐标\大小等实现示例
2020/07/09 Python
消防工作实施方案
2014/06/09 职场文书
党的群众路线教育实践活动制度建设计划方案
2014/10/31 职场文书
2014流动人口计划生育工作总结
2014/12/20 职场文书
教师党员自我评价范文
2015/03/04 职场文书
停水通知
2015/04/16 职场文书
2015年远程教育工作总结
2015/05/20 职场文书
数据结构课程设计心得体会
2016/01/15 职场文书
Python中X[:,0]和X[:,1]的用法
2021/05/10 Python
vue实现无缝轮播效果(跑马灯)
2021/05/14 Vue.js
Python如何让字典保持有序排列
2022/04/29 Python