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 相关文章推荐
使用jQuery实现dropdownlist的联动效果(sharepoint 2007)
Mar 30 Javascript
javascript eval(func())使用示例
Dec 05 Javascript
js查找某元素中的所有图片地址的方法
Jan 16 Javascript
Js获取下拉框选定项的值和文本的实现代码
Feb 26 Javascript
Javascript中的Callback方法浅析
Mar 15 Javascript
javascript自定义in_array()函数实现方法
Aug 03 Javascript
easyui Droppable组件实现放置特效
Aug 19 Javascript
javascript验证香港身份证的格式或真实性
Feb 07 Javascript
node.js 核心http模块,起一个服务器,返回一个页面的实例
Sep 11 Javascript
jQuery实现数字华容道小游戏(实例代码)
Jan 16 jQuery
js实现九宫格抽奖
Mar 19 Javascript
VUE UPLOAD 通过ACTION返回上传结果操作
Sep 07 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定义函数代码
2015/02/26 PHP
JavaScript mapreduce工作原理简析
2012/11/25 Javascript
js批量设置样式的三种方法不推荐使用with
2013/02/25 Javascript
JavaScript的事件绑定(方便不支持js的时候)
2013/10/01 Javascript
JavaScript自定义方法实现trim()、Ltrim()、Rtrim()的功能
2013/11/03 Javascript
浅析JavaScript中的typeof运算符
2013/11/30 Javascript
jQuery自带的一些常用方法总结
2014/09/03 Javascript
javascript实现图片上传前台页面
2015/08/18 Javascript
Javascript基于对象三大特性(封装性、继承性、多态性)
2016/01/04 Javascript
数据结构中的各种排序方法小结(JS实现)
2016/07/23 Javascript
jQuery简单实现彩色云标签效果示例
2016/08/01 Javascript
JS如何设置cookie有效期为当天24点并弹出欢迎登陆界面
2016/08/04 Javascript
jQuery实现的无限级下拉菜单功能示例
2016/09/12 Javascript
jQuery动态生成Bootstrap表格
2016/11/01 Javascript
JS实现加载和读取XML文件的方法详解
2017/04/24 Javascript
Node.js连接mongodb实例代码
2017/06/06 Javascript
Vue AST源码解析第一篇
2017/07/19 Javascript
简述Angular 5 快速入门
2017/11/04 Javascript
Javascript中prototype与__proto__的关系详解
2018/03/11 Javascript
详解Vue 单文件组件的三种写法
2020/02/19 Javascript
JS面向对象编程基础篇(二) 封装操作实例详解
2020/03/03 Javascript
nuxt.js 在middleware(中间件)中实现路由鉴权操作
2020/11/06 Javascript
js实现复制粘贴的两种方法
2020/12/04 Javascript
100行Python代码实现自动抢火车票(附源码)
2018/01/11 Python
Python多进程与服务器并发原理及用法实例分析
2018/08/21 Python
python程序控制NAO机器人行走
2019/04/29 Python
将python运行结果保存至本地文件中的示例讲解
2019/07/11 Python
Python: 传递列表副本方式
2019/12/19 Python
python线程池如何使用
2020/05/28 Python
使用Keras加载含有自定义层或函数的模型操作
2020/06/10 Python
超级实用的8个Python列表技巧
2020/08/24 Python
最新的小工具和卓越的产品设计:Oh That Tech!
2019/08/07 全球购物
销售人员中英文自荐信
2013/09/22 职场文书
中秋晚会策划方案
2014/06/12 职场文书
2014年最新领导班子整改方案
2014/09/27 职场文书
毕业论文致谢部分怎么写
2015/05/14 职场文书