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团队打造的javascript单元测试工具QUnit介绍
Feb 26 Javascript
JavaScript.The.Good.Parts阅读笔记(二)作用域&amp;闭包&amp;减缓全局空间污染
Nov 16 Javascript
js实现一个省市区三级联动选择框代码分享
Mar 06 Javascript
JavaScript实现简单获取当前网页网址的方法
Nov 09 Javascript
Javascript简单实现面向对象编程继承实例代码
Nov 27 Javascript
javascript针对不确定函数的执行方法
Dec 16 Javascript
easyui messager alert 三秒后自动关闭提示的实例
Nov 07 Javascript
JS获得一个对象的所有属性和方法实例
Feb 21 Javascript
vue实现搜索功能
May 28 Javascript
基于JavaScript伪随机正态分布代码实例
Nov 07 Javascript
JS实现点击下拉列表文本框中出现对应的网址,点击跳转按钮实现跳转
Nov 25 Javascript
解决pycharm双击但是无法打开的情况
Oct 31 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
模仿OSO的论坛(一)
2006/10/09 PHP
PHP遍历数组的几种方法
2012/03/22 PHP
解析PHP中intval()等int转换时的意外异常情况
2013/06/21 PHP
PHP字符串的递增和递减示例介绍
2014/02/11 PHP
php实现文件编码批量转换
2014/03/10 PHP
PHP实现合并两个排序链表的方法
2018/01/19 PHP
用javascript获取地址栏参数
2006/12/22 Javascript
js获取字符串字节数方法小结
2015/06/09 Javascript
jQuery EasyUi实战教程之布局篇
2016/01/26 Javascript
JS实现点击事件统计的简单实例
2016/07/10 Javascript
AngularJS通过$http和服务器通信详解
2016/09/21 Javascript
如何在AngularJs中调用第三方插件库
2017/05/21 Javascript
js 图片转base64的方式(两种)
2018/04/24 Javascript
vue中的自定义分页插件组件的示例
2018/08/18 Javascript
微信小程序外卖选购页实现切换分类与数量加减功能案例
2019/01/15 Javascript
Element ui 下拉多选时新增一个选择所有的选项
2019/08/21 Javascript
webpack的tree shaking的实现方法
2019/09/18 Javascript
解决vue侦听器watch,调用this时出现undefined的问题
2020/10/30 Javascript
原生js实现放大镜组件
2021/01/22 Javascript
[02:25]专访DOTA2负责人Erik 国际邀请赛暂不会离开西雅
2014/07/21 DOTA
[05:04]DOTA2上海特级锦标赛主赛事第二日TOP10
2016/03/04 DOTA
Python实现单词拼写检查
2015/04/25 Python
pandas读取CSV文件时查看修改各列的数据类型格式
2019/07/07 Python
python多进程(加入进程池)操作常见案例
2019/10/21 Python
python GUI库图形界面开发之PyQt5窗口类QMainWindow详细使用方法
2020/02/26 Python
怎么快速自学python
2020/06/22 Python
pytorch中的weight-initilzation用法
2020/06/24 Python
pandas参数设置的实用小技巧
2020/08/23 Python
python爬虫scrapy框架之增量式爬虫的示例代码
2021/02/26 Python
益达广告词
2014/03/14 职场文书
房地产开发项目建议书
2014/05/16 职场文书
应急管理培训方案
2014/06/12 职场文书
暑期培训班招生方案
2014/08/26 职场文书
我的职业生涯规划:打造自己的运动帝国
2014/09/18 职场文书
2014年保洁工作总结
2014/11/24 职场文书
学困生帮扶工作总结
2015/08/13 职场文书