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 相关文章推荐
js常用函数 不错
Sep 08 Javascript
JavaScript 对象、函数和继承
Jul 07 Javascript
javascript取消文本选定的实现代码
Nov 14 Javascript
基于jquery的拖动布局插件
Nov 25 Javascript
node.js中的Socket.IO使用实例
Nov 04 Javascript
jQuery通过控制节点实现仅在前台通过get方法完成参数传递
Feb 02 Javascript
js操作table元素实现表格行列新增、删除技巧总结
Nov 18 Javascript
jquery mobile界面数据刷新的实现方法
May 28 Javascript
prototype.js简单实现ajax功能示例
Oct 18 Javascript
Auto.js自动收取自己和好友蚂蚁森林能量脚本
Jun 28 Javascript
详解使用mpvue开发github小程序总结
Jul 25 Javascript
用vue-cli开发vue时的代理设置方法
Sep 20 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 db类库进行数据库操作
2009/03/19 PHP
php Static关键字实用方法
2010/06/04 PHP
laravel实现图片上传预览,及编辑时可更换图片,并实时变化的例子
2019/11/14 PHP
php 多进程编程父进程的阻塞与非阻塞实例分析
2020/02/22 PHP
tp5.1 框架数据库高级查询技巧实例总结
2020/05/25 PHP
Prototype 1.5.0_rc1 及 Prototype 1.5.0 Pre0小抄本
2006/09/22 Javascript
javascript实现画不相交的圆
2015/04/07 Javascript
iscroll碰到Select无法选择下拉刷新的解决办法
2016/05/21 Javascript
js日期相关函数dateAdd,dateDiff,dateFormat等介绍
2016/09/24 Javascript
详解vue组件化开发-vuex状态管理库
2017/04/10 Javascript
基于layer.js实现收货地址弹框选择然后返回相应的地址信息
2017/05/26 Javascript
JS中使用gulp实现压缩文件及浏览器热加载功能
2017/07/12 Javascript
Bootstrap开发中Tab标签页切换图表显示问题的解决方法
2018/07/13 Javascript
Vue-cli3项目配置Vue.config.js实战记录
2018/07/29 Javascript
Python实现的中国剩余定理算法示例
2017/08/05 Python
Python实现按学生年龄排序的实际问题详解
2017/08/29 Python
python仿evething的文件搜索器实例代码
2019/05/13 Python
详解python pandas 分组统计的方法
2019/07/30 Python
Python动态导入模块和反射机制详解
2020/02/18 Python
Python pickle模块常用方法代码实例
2020/10/10 Python
运行python提示no module named sklearn的解决方法
2020/11/29 Python
CSS3之边框多颜色Border-color属性使用示例
2013/10/11 HTML / CSS
如何使用html5与css3完成google涂鸦动画
2012/12/16 HTML / CSS
基于HTML5的齿轮动画特效
2016/02/29 HTML / CSS
土耳其家居建材网站:Koçtaş
2016/11/22 全球购物
de Bijenkorf比利时官网:荷兰最知名的百货商店
2017/06/29 全球购物
Farah官方网站:男士服装及配件
2019/11/01 全球购物
Python如何定义一个函数
2015/09/01 面试题
2015年农村党员干部主题教育活动总结
2015/03/25 职场文书
2015年行政执法工作总结
2015/05/23 职场文书
医护人员继续教育学习心得体会
2016/01/19 职场文书
学校趣味运动会开幕词
2016/03/04 职场文书
你为什么是穷人?可能是这5个缺点造成
2019/07/11 职场文书
JavaScript如何利用Promise控制并发请求个数
2021/05/14 Javascript
HTML+CSS制作心跳特效的实现
2021/05/26 HTML / CSS
PyMongo 查询数据的实现
2021/06/28 Python