js动态创建样式: style 和 link

ie6 不能 document.createElement('style') 然后append到head标签里。所以就找到这样个好文章

有很多提供动态创建 style 节点的方法,但是大多数都仅限于外部的 css 文件。如何能使用程序生成的字符串动态创建 style 节点,我搞了2个小时。

静态外部 css 文件语法: @import url(style.css);

动态外部 css 文件加载的方法有如下:

第一种: 创建link节点 href属性引入外部css, link节点append到文档中

在编写组件的情况下,为每个组件单独引入外部样式文件的方法不大好,比较理想的是js直接完成样式输出

var style = document.createElement(’link’);
style.href = ’style.css’;
style.rel = ’stylesheet’;
style.type = ‘text/css’;
document.getElementsByTagName(’HEAD’).item(0).appendChild(style);

第二种简单:document.createStyleSheet(style.css) // IE ONLY

document.createStyleSheet( url ) 这是ie才有的方法,url可以是 "javascript:stylestr;"的形式 ;chrome firefox无此方法

document.createStyleSheet(style.css);

第三种: 动态的 style 节点 // W3C

创建style节点 innerHTML属性写入样式内容,style节点append到head中 chrome firefox 支持

var style = document.createElement(’style’);
style.type = ‘text/css’;
style.innerHTML=”body{ background-color:blue; }”;
document.getElementsByTagName(’HEAD’).item(0).appendChild(style);

很遗憾,上面的代码在 ff 里面成功,但是 ie 不支持。从老外论坛得到代码:

var sheet = document.createStyleSheet();
sheet.addRule(’body’,'background-color:red’);

成功,但是很麻烦,要把字符串拆开写,长一点的写死,累的像狗一样。

接着搜,在一个不知道什么国家的什么语言的blog上找到代码:

document.createStyleSheet(”javascript:’body{background-color:blue;’”);

成功,此人实在厉害,但是问题出来了,url 最大 255 个字符,长一点的就不行了,改:

window.style=”body{background-color:blue;”;
document.createStyleSheet(”javascript:style”); document.createStyleSheet( "javascript: stylestr") 直接创建stylesheet节点 会自动append到head中

完美解决!!

function blue(){
if(document.all){ // document.createStyleSheet(url)
window.style="body{background-color:blue;";
document.createStyleSheet("javascript:style");
}else{ //document.createElement(style)
var style = document.createElement('style');
style.type = 'text/css';
style.innerHTML="body{ background-color:blue }";
document.getElementsByTagName('HEAD').item(0).appendChild(style);
}
}

js动态创建样式: style 和 link的更多相关文章

  1. js动态创建及移除div的方法

    本文实例讲述了js动态创建及移除div的方法.分享给大家供大家参考.具体实现方法如下: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 ...

  2. 用JS动态创建登录表单,报了个小错误

    后来发现原来是: dvObj.style.border='#Red 1px sold'; 其中的Red多谢了一个‘#’, 但是奇怪的是在chrome和firefox都备有报错,但是在ie中报错了. 各 ...

  3. 微信小程序 JS动态修改样式

    微信小程序这个坑啊,js动态修改样式,我们并不能用js或者jq 轻轻松松一行代码搞定.或者用removeClass addClass 来修改样式. 以下是一种动态修改样式的方法,原理是绑定数据,然后动 ...

  4. UEditor js动态创建和textarea中渲染【原】

    UEditor动态创建和textarea中渲染 http://ueditor.baidu.com/website/examples/textareaDemo.html <!DOCTYPE> ...

  5. JS动态创建Table,Tr,Td并赋值

    JS动态创建Table,Tr,Td并赋值. 成果库修改: 要求主题列表随成果类型改变而改变 网上查询资料后开工,在成果类型下拉框添加change()事件触发Dwr,查询主题集合——动态创建/编辑Tab ...

  6. js动态创建表格,删除行列的小例子

    js动态创建表格,删除行列的实例代码. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" &quo ...

  7. 通过js动态创建button

    通过js动态创建button 一.实例描述 通过JS的DOM对象,实现元素的动态创建. 二.效果 三.代码 <!DOCTYPE html> <html lang="zh-c ...

  8. js 动态创建变量

      js 动态创建变量 CreationTime--2018年7月2日15点04分 Author:Marydon 1.实现方式 通过eval()实现 2.代码实现 /** * 声明一个函数 * @ex ...

  9. js动态创建的select2标签样式加载不上解决办法

    js动态创建的select2标签样式加载不上:调用select2的select2()函数来初始化一下: js抛出了Uncaught query function not defined for Sel ...

随机推荐

  1. ios 应用程序之间的跳转(内置程序的实现)

    ios 应用程序之间的跳转(内置程序的实现) 一个程序若要跳到另一个程序.需要在目标程序的plist文件里面修改: 打开info.plist,添加一项URL types 展开URLtypes,再展开I ...

  2. firefox 自写扩展改版,总结

    自己写的扩展,油猴功能,进一步改进,增加了许多操作.原来只是在13以下版本下面能用,主要是在13版本下面chrome代码和page下面代码能够直接互调,13版本以后就不可以了,最近考虑到新版Firef ...

  3. Linux下安装QT和OpenGL后QT无法使用OpenGL的解决方法

    我的系统为Ubuntu14.04,用apt-get安装了实现了OpenGl的mesa,QT则是用官网下载的run文件来安装的. 好了,现在两个都分别有了,所以要在qt下尝试写OpenGl代码. 之前试 ...

  4. c语言中的制表符\t与空格

    (本文不讨论制表符与空格缩进问题) 编程过程中,我们常常用多个空格或制表符分隔两个字符串,那么这两个在显示效果上有什么区别呢? 比较如下两行代码的输出效果 代码1: printf("1\t1 ...

  5. 【转】 UIButton上使用UIEdgeInsetsMaketitle跟图片对齐

    [转]http://blog.csdn.net/yanxiaoqing/article/details/7230660 默认情况下,不设置的效果,都使居中现实,button为150*150 使用以下设 ...

  6. Spring单例与线程安全小结

    一.Spring单例模式与线程安全   Spring框架里的bean,或者说组件,获取实例的时候都是默认的单例模式,这是在多线程开发的时候要尤其注意的地方. 单例模式的意思就是只有一个实例.单例模式确 ...

  7. poj1528---(数论)

    题意:一个数除了自身以外的所有因数相加,得到的数如果小于自身,输出deficient,否则输出abundant,如果相等,输出perfect 这道题核心:求一个数的所有除本身之外的因数的和 ,i; ; ...

  8. docker基于 aufs 文件系统

    docker的核心功能就是容器版本管理,在容器层实现了CVS版本管理,比如git那种可以commit/roll back 而AUFS就是其实现基础 AUFS可以实现文件系统的snapshot,这样对f ...

  9. express中路由设置的坑-----1

    router.get('/commodities/sortable', utils.logged, function (req, res) { Commodity.find({force_top:tr ...

  10. 剑指offer 22 栈的压入、弹出序列

    class Solution { public: bool IsPopOrder(vector<int> pushV,vector<int> popV) { bool resu ...