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 相关文章推荐
Extjs ajax同步请求时post方式参数发送方式
Aug 05 Javascript
js实现类似MSN提示的页面效果代码分享
Aug 24 Javascript
Vue.js 表单校验插件
Aug 14 Javascript
JavaScript使用键盘输入控制实现数字验证功能
Aug 19 Javascript
JavaScript实现窗口抖动效果
Oct 19 Javascript
使用JS在浏览器中判断当前网络连接状态的几种方法
May 05 Javascript
vue axios登录请求拦截器
Apr 02 Javascript
微信小程序用户信息encryptedData详解
Aug 24 Javascript
JS 音频可视化插件Wavesurfer.js的使用教程
Oct 31 Javascript
Vue路由守卫之路由独享守卫
Sep 25 Javascript
JavaScript使用canvas绘制随机验证码
Feb 17 Javascript
vue中音频wavesurfer.js的使用方法
Feb 20 Vue.js
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代码网站如何防范SQL注入漏洞攻击建议分享
2012/03/01 PHP
PHP消息队列用法实例分析
2016/02/12 PHP
PHP绕过open_basedir限制操作文件的方法
2018/06/10 PHP
PHP 观察者模式深入理解与应用分析
2019/09/25 PHP
详解phpstorm2020最新破解方法
2020/09/17 PHP
javascript一个无懈可击的实例化XMLHttpRequest的方法
2010/10/13 Javascript
JavaScript实现的购物车效果可以运用在好多地方
2014/05/09 Javascript
JS设置cookie、读取cookie
2016/02/24 Javascript
悬浮广告方法日常收集整理
2016/03/18 Javascript
常用JS图片滚动(无缝、平滑、上下左右滚动)代码大全(推荐)
2016/12/20 Javascript
Jil,高效的json序列化和反序列化库
2017/02/15 Javascript
Vuex和前端缓存的整合策略详解
2017/05/09 Javascript
React Native仿美团下拉菜单的实例代码
2017/08/08 Javascript
jquery实现的简单轮播图功能【适合新手】
2018/08/17 jQuery
vue 中使用 watch 出现了如下的报错的原因分析
2019/05/21 Javascript
Vue自定义多选组件使用详解
2020/09/08 Javascript
在Python中marshal对象序列化的相关知识
2015/07/01 Python
浅谈Python浅拷贝、深拷贝及引用机制
2016/12/15 Python
使用python遍历指定城市的一周气温
2017/03/31 Python
rabbitmq(中间消息代理)在python中的使用详解
2017/12/14 Python
python os用法总结
2018/06/08 Python
python 文件转成16进制数组的实例
2018/07/09 Python
python3实现单目标粒子群算法
2019/11/14 Python
世界各地的当地人的食物体验:Eatwith
2019/07/26 全球购物
SmartBuyGlasses比利时:购买品牌太阳镜和眼镜
2019/08/09 全球购物
JSF面试题:Jsf中导航的标签是什么
2013/04/20 面试题
销售实习自我鉴定
2013/12/07 职场文书
中学教师教育感言
2014/02/21 职场文书
纺织工程专业推荐信
2014/09/08 职场文书
党员学习中共十八大报告思想汇报
2014/09/15 职场文书
安全责任书
2015/01/29 职场文书
工伤事故赔偿协议书
2015/08/06 职场文书
《小乌鸦爱妈妈》教学反思
2016/02/19 职场文书
详解盒子端CSS动画性能提升
2021/05/24 HTML / CSS
基于Redis6.2.6版本部署Redis Cluster集群的问题
2022/04/01 Redis
shell进度条追踪指令执行时间的场景分析
2022/06/16 Servers