使用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 相关文章推荐
List the Codec Files on a Computer
Jun 11 Javascript
javascript中length属性的探索
Jul 31 Javascript
jquery中 $.expr使用实例介绍
Jun 09 Javascript
javascript操作字符串的原生方法
Dec 22 Javascript
jquery+json实现数据二级联动的方法
Nov 28 Javascript
js实现打地鼠小游戏
Feb 13 Javascript
Angular-Ui-Router+ocLazyLoad动态加载脚本示例
Mar 02 Javascript
浅谈express 中间件机制及实现原理
Aug 31 Javascript
浅谈AngularJS中使用$resource(已更新)
Sep 14 Javascript
关于Angularjs中自定义指令一些有价值的细节和技巧小结
Apr 22 Javascript
微信小程序实现预览图片功能
Oct 22 Javascript
vue data有值,但是页面{{}} 取不到值的解决
Nov 09 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
安装apache2.2.22配置php5.4(具体操作步骤)
2013/06/26 PHP
PHP基础知识介绍
2013/09/17 PHP
php环境下利用session防止页面重复刷新的具体实现
2014/01/09 PHP
ThinkPHP表单自动提交验证实例教程
2014/07/18 PHP
百万级别知乎用户数据抓取与分析之PHP开发
2015/09/28 PHP
PHP flush 函数使用注意事项
2016/08/26 PHP
php smtp实现发送邮件功能
2017/06/22 PHP
JavaScript实现动态创建CSS样式规则方案
2014/09/06 Javascript
JS实现点击按钮自动增加一个单元格的方法
2015/03/09 Javascript
Sea.JS知识总结
2016/05/05 Javascript
jQuery获取及设置表单input各种类型值的方法小结
2016/05/24 Javascript
jquery弹出框插件jquery.ui.dialog用法分析
2016/08/20 Javascript
浅谈Vue.js
2017/03/02 Javascript
NodeJS安装图文教程
2018/04/19 NodeJs
微信小程序自定义组件之可清除的input组件
2018/07/17 Javascript
vue中v-for通过动态绑定class实现触发效果
2018/12/06 Javascript
JavaScript设计模式之装饰者模式实例详解
2019/01/17 Javascript
jQuery实现经典的网页3D轮播图封装功能【附源码下载】
2019/02/15 jQuery
简述Vue中容易被忽视的知识点
2019/12/09 Javascript
vue-cli3 取消eslint校验代码的解决办法
2020/01/16 Javascript
Vue如何使用混合Mixins和插件开发详解
2020/02/05 Javascript
vue框架中props的typescript用法详解
2020/02/17 Javascript
python使用response.read()接收json数据的实例
2018/12/19 Python
使用python实现简单五子棋游戏
2019/06/18 Python
利用Python实现手机短信监控通知的方法
2019/07/22 Python
python虚拟环境的安装和配置(virtualenv,virtualenvwrapper)
2019/08/09 Python
Pytorch maxpool的ceil_mode用法
2020/02/18 Python
Html5之自定义属性(data-,dataset)
2019/11/19 HTML / CSS
Brasty波兰:香水、化妆品、手表网上商店
2019/04/15 全球购物
思想品德课教学反思
2014/02/10 职场文书
文化建设工作方案
2014/05/12 职场文书
旅游与酒店管理专业求职信
2014/07/21 职场文书
2016中秋节月饼促销广告语
2016/01/28 职场文书
图解上海144收音机
2021/04/22 无线电
HTML通过表单实现酒店筛选功能
2021/05/18 HTML / CSS
Unicode中的CJK(中日韩统一表意文字)字符小结
2021/12/06 HTML / CSS