Javascript动态引用CSS文件的2种方法介绍


Posted in Javascript onJune 06, 2014

最近做一个项目,需要javascript动态插入样式,结果以前的方法失效了!查了2个小时的原因竟然是自己手贱,这个最后再说!

javascript插入样式在前端开发中应用比较广泛,特别是在修改前端表现和页面换肤的时候。最近做的这个任务是用户在别人的站点上点击一个按钮,就会在别的站点页面下插入一个脚本,执行,这其中包含了样式的插入。

一般情况下javascript动态插入样式有两种,一种页面中引入外部样式,在<head>中使用<link>标签引入一个外部样式文件,另一种是在页面中使用<style>标签插入页面样式(这里说的不是style属性)。

一、页面中引入外部样式:

在<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.3water.com/home/css/reset.css?v=20101227");

但是在我目前做的这个项目中本身应用的样式非常少,直接用引入一个外部样式文件似乎不合适,所以我选择了第二种方案,在页面中使用<style>标签插入页面样式。

二、使用<style>标签插入页面样式:

这种方式在各个主流浏览器存在兼容性问题,像firefox等标准浏览器无法直接获取设置styleSheet的cssText值,标准浏览器下只能使用document.styleSheets[0].cssRules[0].cssText单个获取样式;同时使用:document.styleSheets[0].cssRules[0].cssText=newcssText;页面不会自动更新样式,必须使用:document.styleSheets[0].cssRules[0].style.cssText=newcssText;这点似乎没坑爹的IE来的人性化和简便。YUI中使用了一个很好的办法:style.appendChild(document.createTextNode(styles));采用createTextNode将样式字符串添加到<style>标签内;

function includeStyleElement(styles, styleId) {
    if (document.getElementById(styleId)) {
        return
    }
    var style = document.createElement("style");
    style.id = styleId;
    //这里最好给ie设置下面的属性
    /*if (isIE()) {
style.type = "text/css";
style.media = "screen"
}*/
    (document.getElementsByTagName("head")[0] || document.body).appendChild(style);
    if (style.styleSheet) { //for ie
        style.styleSheet.cssText = styles;
    } else { //for w3c
        style.appendChild(document.createTextNode(styles));
    }
}
var styles = "#div{background-color: #FF3300; color:#FFFFFF }";
includeStyleElement(styles, "newstyle");

这样页面中的元素就能直接应用样式了,不管你的这些元素是不是通过脚本追加的。

关于手贱:

看这段代码:

var divObj = document.createElement("div");
divObj.id = "__div";
divObj.innerHTML = "测试js插入DOM和样式";
document.body.appendChild(divObj);
var styles = "#__div{background-color: #FF3300; color:#FFFFFF }";
includeStyleElement(styles, "newstyle");

前面说了这个项目是用户在别人的站点上点击一个按钮,就会在别的站点页面下插入一个脚本,执行,这其中包含了样式的插入,我为了尽可能的保证我创建的元素ID唯一性,手贱在元素ID前加了“__”,表示私有防止冲突。结果悲剧了,IE6,IE7 class和id的命名不能以下划线开头(“_”),竟然把这个给忘了!花了两个小时才找到原因。悲剧啊!得出一个结论!做前端千万不能手贱!

Javascript 相关文章推荐
javascript实现信息的显示和隐藏如注册页面
Dec 03 Javascript
从数据库读取数据后将其输出成html标签的三种方法
Oct 13 Javascript
js+html5操作sqlite数据库的方法
Feb 02 Javascript
Node.js程序中的本地文件操作用法小结
Mar 06 Javascript
BootStrap Progressbar 实现大文件上传的进度条的实例代码
Jun 27 Javascript
分享jQuery封装好的一些常用操作
Jul 28 Javascript
JS实现一个简单的日历
Feb 22 Javascript
js轮播图无缝滚动效果
Jun 17 Javascript
解决Vue2.0中使用less给元素添加背景图片出现的问题
Sep 03 Javascript
vue拖拽组件使用方法详解
Dec 01 Javascript
Echarts实现多条折线可拖拽效果
Dec 19 Javascript
Vue简单实现原理详解
May 07 Javascript
jquery 隐藏与显示tr标签示例代码
Jun 06 #Javascript
Node.js中对通用模块的封装方法
Jun 06 #Javascript
JavaScript中对循环语句的优化技巧深入探讨
Jun 06 #Javascript
jquery修改网页背景颜色通过css方法实现
Jun 06 #Javascript
jquery动态调整div大小使其宽度始终为浏览器宽度
Jun 06 #Javascript
JavaScript也谈内存优化
Jun 06 #Javascript
Javascript中的delete操作符详细介绍
Jun 06 #Javascript
You might like
php的日期处理函数及uchome的function_coomon中日期处理函数的研究
2011/01/12 PHP
php中使用session防止用户非法登录后台的方法
2015/01/27 PHP
PHP验证终端类型是否为手机的简单实例
2017/02/07 PHP
Laravel5.* 打印出执行的sql语句的方法
2017/07/24 PHP
php+redis实现商城秒杀功能
2020/11/19 PHP
PHP判断是否是微信打开,浏览器打开的方法
2018/03/14 PHP
ExtJs Excel导出并下载IIS服务器端遇到的问题
2011/09/16 Javascript
Javascript中的String对象详谈
2014/03/03 Javascript
JQuery.get提交页面不跳转的解决方法
2015/01/13 Javascript
jQuery插件制作之全局函数用法实例
2015/06/01 Javascript
怎么引入(调用)一个JS文件
2016/05/26 Javascript
浅谈JS继承_借用构造函数 &amp; 组合式继承
2016/08/16 Javascript
JQuery 获取多个select标签option的text内容(实例)
2017/09/07 jQuery
php结合js实现多条件组合查询
2019/05/28 Javascript
JavaScript 如何在浏览器中使用摄像头
2020/12/02 Javascript
Django中实现点击图片链接强制直接下载的方法
2015/05/14 Python
Python设计模式之中介模式简单示例
2018/01/09 Python
python try 异常处理(史上最全)
2019/03/07 Python
Python内置类型性能分析过程实例
2020/01/29 Python
python 利用zmail库发送邮件
2020/09/11 Python
Python 图片处理库exifread详解
2021/02/25 Python
HTML5 Canvas之测试浏览器是否支持Canvas的方法
2015/01/01 HTML / CSS
简单介绍HTML5中的文件导入
2015/05/08 HTML / CSS
Banggood官网:面向全球客户的综合商城
2017/04/19 全球购物
Tuckernuck官网:经典的美国品质服装、鞋子和配饰
2021/01/11 全球购物
师范大学音乐表演专业求职信
2013/10/23 职场文书
社团成立邀请函
2014/01/08 职场文书
小区消防演习方案
2014/02/21 职场文书
党的群众路线学习材料
2014/05/16 职场文书
群众路线班子对照检查材料
2014/09/25 职场文书
领导班子四风查摆对照检查材料思想汇报
2014/10/05 职场文书
单位计划生育责任书
2015/05/09 职场文书
2015年小学远程教育工作总结
2015/07/28 职场文书
2015年成本会计工作总结
2015/10/14 职场文书
2016年小学生清明节广播稿
2015/12/17 职场文书
weblogic服务建立数据源连接测试更新mysql驱动包的问题及解决方法
2022/01/22 MySQL