javascript插入样式实现代码


Posted in Javascript onFebruary 22, 2012

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 querySelector和getElementById通过id获取元素的区别
Apr 20 Javascript
jquery之超简单的div显示和隐藏特效demo(分享)
Jul 09 Javascript
html5的自定义data-*属性和jquery的data()方法的使用示例
Aug 21 Javascript
JS+CSS相对定位实现的下拉菜单
Oct 06 Javascript
JavaScript学习笔记之检测客户端类型是(引擎、浏览器、平台、操作系统、移动设备)
Dec 03 Javascript
Extjs gridpanel 中的checkbox(复选框)根据某行的条件不能选中的解决方法
Feb 17 Javascript
AngularJS实现注册表单验证功能
Oct 16 Javascript
JS设计模式之策略模式概念与用法分析
Feb 05 Javascript
Vue表单控件数据绑定方法详解
Feb 05 Javascript
JS实现碰撞检测效果
Mar 12 Javascript
JS实现放大镜效果
Sep 21 Javascript
详解Anyscript开发指南绕过typescript类型检查
Sep 23 Javascript
Javascript 中的 call 和 apply使用介绍
Feb 22 #Javascript
JS对象与JSON格式数据相互转换
Feb 20 #Javascript
js 代码优化点滴记录
Feb 19 #Javascript
JQuery.closest(),parent(),parents()寻找父结点
Feb 17 #Javascript
JavaScript操作XML 使用百度RSS作为新闻源示例
Feb 17 #Javascript
jquery实现奇偶行赋值不同css值
Feb 17 #Javascript
qTip2 精致的基于jQuery提示信息插件
Feb 17 #Javascript
You might like
php中将html中的br换行符转换为文本输入中的换行符
2013/03/26 PHP
php查找指定目录下指定大小文件的方法
2014/11/28 PHP
PHP快速推送微信模板消息
2017/04/14 PHP
禁止直接访问php文件代码分享
2020/05/05 PHP
cookie在javascript中的使用技巧以及隐私在服务器端的设置
2012/12/03 Javascript
三种取消选中单选框radio的方法
2014/09/09 Javascript
javascript转换日期字符串为Date日期对象的方法
2015/02/13 Javascript
javascript递归回溯法解八皇后问题
2015/04/22 Javascript
简介JavaScript中的setTime()方法的使用
2015/06/11 Javascript
jquery计算出left和top,让一个div水平垂直居中的简单实例
2016/07/13 Javascript
AngulerJS学习之按需动态加载文件
2017/02/13 Javascript
通过vue-cli来学习修改Webpack多环境配置和发布问题
2017/12/22 Javascript
不到200行 JavaScript 代码实现富文本编辑器的方法
2018/01/03 Javascript
使用Phantomjs和Node完成网页的截屏快照的方法
2019/07/16 Javascript
如何在Node和浏览器控制台中打印彩色文字
2020/01/09 Javascript
JS前后端实现身份证号验证代码解析
2020/07/23 Javascript
javascript实现贪吃蛇小游戏
2020/07/28 Javascript
使用eslint和githooks统一前端风格的技巧
2020/07/29 Javascript
六个窍门助你提高Python运行效率
2015/06/09 Python
Python微信公众号开发平台
2018/01/25 Python
pycharm配置pyqt5-tools开发环境的方法步骤
2019/02/11 Python
Python机器学习算法库scikit-learn学习之决策树实现方法详解
2019/07/04 Python
python实现简单银行管理系统
2019/10/25 Python
ansible动态Inventory主机清单配置遇到的坑
2020/01/19 Python
Python 定义只读属性的实现方式
2020/03/05 Python
Python run()函数和start()函数的比较和差别介绍
2020/05/03 Python
财务会计专业毕业生自荐信
2013/10/19 职场文书
教师思想作风整顿个人剖析材料
2014/10/10 职场文书
婚前协议书范本
2014/10/27 职场文书
2014年学习部工作总结
2014/11/12 职场文书
质量负责人岗位职责
2015/02/15 职场文书
小学语文继续教育研修日志
2015/11/13 职场文书
golang在GRPC中设置client的超时时间
2021/04/27 Golang
python实现自动清理文件夹旧文件
2021/05/10 Python
详解CSS玩转图片Base64编码
2021/05/25 HTML / CSS
Java中Dijkstra(迪杰斯特拉)算法
2022/05/20 Java/Android