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 相关文章推荐
国外的为初学者写的JavaScript教程
Jun 09 Javascript
jQuery hover 延时器实现代码
Mar 12 Javascript
js常用代码段收集
Oct 28 Javascript
Jquery Ajax方法传值到action的方法
May 11 Javascript
BootStrap学习系列之Bootstrap Typeahead 组件实现百度下拉效果(续)
Jul 07 Javascript
jquery判断iPhone、Android设备类型
Sep 14 Javascript
表单input项使用label同时引用Bootstrap库导致input点击效果区增大问题
Oct 11 Javascript
vue动态路由实现多级嵌套面包屑的思路与方法
Aug 16 Javascript
p5.js入门教程之键盘交互
Mar 19 Javascript
javascript实现点击星星小游戏
Dec 24 Javascript
node.js中stream流中可读流和可写流的实现与使用方法实例分析
Feb 13 Javascript
Vue通过provide inject实现组件通信
Sep 03 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/27 PHP
PHP代码优化技巧小结
2015/09/29 PHP
php curl批处理实现可控并发异步操作示例
2018/05/09 PHP
详解PHP的抽象类和抽象方法以及接口总结
2019/03/15 PHP
理解Javascript_08_函数对象
2010/10/15 Javascript
Javascript浅谈之引用类型
2013/12/18 Javascript
jquery.hotkeys监听键盘按下事件keydown插件
2014/05/11 Javascript
用jquery的方法制作一个简单的导航栏
2014/06/23 Javascript
Javascript获取当前时间函数和时间操作小结
2014/10/01 Javascript
node爬取微博的数据的简单封装库nodeweibo使用指南
2015/01/02 Javascript
基于jquery实现省市区三级联动效果
2015/12/25 Javascript
jquery模拟实现鼠标指针停止运动事件
2016/01/12 Javascript
结合代码图文讲解JavaScript中的作用域与作用域链
2016/07/05 Javascript
JS IOS/iPhone的Safari浏览器不兼容Javascript中的Date()问题如何解决
2016/11/11 Javascript
在DWR中实现直接获取一个JAVA类的返回值的两种方法
2016/12/25 Javascript
jQuery动态移除和添加背景图片的方法详解
2017/03/07 Javascript
微信小程序 Buffer缓冲区的详解
2017/07/06 Javascript
koa2服务端使用jwt进行鉴权及路由权限分发的流程分析
2019/07/22 Javascript
JS面向对象编程基础篇(三) 继承操作实例详解
2020/03/03 Javascript
JavaScript实现留言板案例
2020/03/17 Javascript
基于aotu.js实现微信自动添加通讯录中的联系人功能
2020/05/28 Javascript
[01:55]2014DOTA2国际邀请赛 BBC正赛第一天总结
2014/07/10 DOTA
[03:42]2016国际邀请赛中国区预选赛首日现场玩家采访
2016/06/26 DOTA
Python实现给文件添加内容及得到文件信息的方法
2015/05/28 Python
Python函数式编程实例详解
2020/01/17 Python
Pandas中DataFrame基本函数整理(小结)
2020/07/20 Python
用HTML5制作烟火效果的教程
2015/05/12 HTML / CSS
下面这个程序执行后会有什么错误或者效果
2014/11/03 面试题
程序集与命名空间有什么不同
2014/07/25 面试题
委托与事件是什么关系?为什么要使用委托
2014/04/18 面试题
2014银行授权委托书样本
2014/10/04 职场文书
2014年教务工作总结
2014/12/03 职场文书
2015年安全教育月活动总结
2015/03/26 职场文书
2016先进集体事迹材料范文
2016/02/25 职场文书
卖车协议书范文
2016/03/23 职场文书
关于python爬虫应用urllib库作用分析
2021/09/04 Python