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 相关文章推荐
XHTML下,JS浮动代码失效的问题
Nov 12 Javascript
自定义右键属性覆盖浏览器默认右键行为实现代码
Feb 02 Javascript
jquery选择器之内容过滤选择器详解
Jan 27 Javascript
JS辨别访问浏览器判断是android还是ios系统
Aug 19 Javascript
AngularJS初始化静态模板详解
Jan 14 Javascript
ECharts仪表盘实例代码(附源码下载)
Feb 18 Javascript
浅谈jquery中next与siblings的区别
Oct 27 Javascript
BootStrap Datetimepicker 汉化的实现代码
Feb 10 Javascript
JavaScript for循环 if判断语句(学习笔记)
Oct 11 Javascript
Vue常见面试题整理【值得收藏】
Sep 20 Javascript
解决layui的table插件无法多层级获取json数据的问题
Sep 19 Javascript
js代码实现轮播图
May 04 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遍历数组的方法汇总分析
2013/06/08 PHP
php以fastCGI的方式运行时文件系统权限问题及解决方法
2015/05/11 PHP
PHP中把错误日志保存在系统日志中(Windows系统)
2015/06/23 PHP
PHP自动识别当前使用移动终端
2018/05/21 PHP
PHP中一个有趣的preg_replace函数详解
2018/08/15 PHP
CL vs ForZe BO5 第三场 2.13
2021/03/10 DOTA
js给onclick事件赋值,动态传参数实例解说
2013/03/28 Javascript
js获取元素相对窗口位置的实现代码
2014/09/28 Javascript
浅谈Javascript中匀速运动的停止条件
2014/12/19 Javascript
js+css实现上下翻页相册代码分享
2015/08/18 Javascript
Jquery实现仿京东商城省市联动菜单
2015/11/19 Javascript
javascript匀速运动实现方法分析
2016/01/08 Javascript
AngularJS利用Controller完成URL跳转
2016/08/09 Javascript
浅谈js数组和splice的用法
2016/12/04 Javascript
详解js数组的完全随机排列算法
2016/12/16 Javascript
Vue中的字符串模板的使用
2018/05/17 Javascript
JS实现中英文混合文字溢出友好截取功能
2018/08/06 Javascript
vue监听input标签的value值方法
2018/08/27 Javascript
javascriptvoid(0)含义以及与&quot;#&quot;的区别讲解
2019/01/19 Javascript
小程序getLocation需要在app.json中声明permission字段
2019/04/04 Javascript
详解Vue中的Props与Data细微差别
2020/03/02 Javascript
[35:44]2014 DOTA2华西杯精英邀请赛 5 24 iG VS VG
2014/05/26 DOTA
python采用requests库模拟登录和抓取数据的简单示例
2014/07/05 Python
Python 中迭代器与生成器实例详解
2017/03/29 Python
Python实现读取字符串按列分配后按行输出示例
2018/04/17 Python
python+pyqt5编写md5生成器
2019/03/18 Python
在python中用url_for构造URL的方法
2019/07/25 Python
python 公共方法汇总解析
2019/09/16 Python
python基于gevent实现并发下载器代码实例
2019/11/01 Python
Under Armour安德玛意大利官网:美国高端运动科技品牌
2020/01/16 全球购物
护理专科毕业生自荐书范文
2014/02/19 职场文书
小学生操行评语大全
2014/04/22 职场文书
小学生我的梦想演讲稿
2014/08/21 职场文书
单位实习工作证明怎么写
2014/11/02 职场文书
一文搞懂如何实现Go 超时控制
2021/03/30 Python
与Windows10相比Windows11有哪些改进?值不值得升级?
2021/11/21 数码科技