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模块模式分析
May 16 Javascript
jQuery 学习第五课 Ajax 使用说明
May 17 Javascript
7款风格新颖的jQuery/CSS3菜单导航分享
Apr 23 Javascript
js中的preventDefault与stopPropagation详解
Jan 29 Javascript
JavaScript获取页面中第一个锚定文本的方法
Apr 03 Javascript
原生JavaScript实现AJAX、JSONP
Feb 07 Javascript
微信小程序 开发之全局配置
May 05 Javascript
js+css实现打字效果
Jun 24 Javascript
解决bootstrap模态框数据缓存的问题方法
Aug 10 Javascript
基于vue的验证码组件的示例代码
Jan 22 Javascript
vue-router路由模式详解(小结)
Aug 26 Javascript
在vue中使用Echarts画曲线图的示例
Oct 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小技巧之过滤ascii控制字符
2014/05/14 PHP
Yii Framework框架获取分类下面的所有子类方法
2014/06/20 PHP
php截取html字符串及自动补全html标签的方法
2015/01/15 PHP
在WordPress中实现评论头像的自定义默认和延迟加载
2015/11/24 PHP
PHP中file_exists使用中遇到的问题小结
2016/04/05 PHP
PHP Trait功能与用法实例分析
2020/06/03 PHP
Jquery 基础学习笔记之文档处理
2009/05/29 Javascript
JS获取IP、MAC和主机名的五种方法
2013/11/14 Javascript
Array栈方法和队列方法的特点说明
2014/01/24 Javascript
从数据库读取数据后将其输出成html标签的三种方法
2014/10/13 Javascript
js实现ifram取父窗口URL地址的方法
2015/02/09 Javascript
JavaScript实现动态删除列表框值的方法
2015/08/12 Javascript
jQuery.trim() 函数及trim()用法详解
2015/10/26 Javascript
JavaScript编码风格指南(中文版)
2016/08/26 Javascript
JavaScript自动点击链接 防止绕过浏览器访问的方法
2017/01/19 Javascript
JS简单获取当前日期时间的方法(如:2017-03-29 11:41:10 星期四)
2017/03/29 Javascript
vue2.0与bootstrap3实现列表分页效果
2017/11/28 Javascript
微信小程序6位或多位验证码密码输入框功能的实现代码
2018/05/29 Javascript
Electron autoUpdater实现Windows安装包自动更新的方法
2018/12/24 Javascript
Vue的生命周期操作示例
2019/09/17 Javascript
微信小程序表单验证WxValidate的使用
2019/11/27 Javascript
vue实践---根据不同环境,自动转换请求的url地址操作
2020/09/21 Javascript
python访问mysql数据库的实现方法(2则示例)
2016/01/06 Python
Python 爬虫学习笔记之单线程爬虫
2016/09/21 Python
python放大图片和画方格实现算法
2018/03/30 Python
Python网络爬虫之爬取微博热搜
2019/04/18 Python
python实现局域网内实时通信代码
2019/12/22 Python
python自动脚本的pyautogui入门学习
2020/04/01 Python
植村秀美国官网:Shu Uemura美国
2019/03/19 全球购物
乌克兰在线电子产品商店:MTA
2019/11/14 全球购物
澳大利亚有机化妆品网上商店:The Well Store
2020/02/20 全球购物
试用期员工考核制度
2014/01/22 职场文书
计划生育证明书写要求
2014/09/17 职场文书
交通安全月活动总结
2015/05/08 职场文书
2016党员三严三实心得体会
2016/01/15 职场文书
mysql的MVCC多版本并发控制的实现
2021/04/14 MySQL