用 JavaScript 修改样式元素
利用 <style> 元素,我们可以在网页中嵌入样式表。如果需要动态增加 <style> 元素,似乎可以用如下的 JavaScript 代码:
var style = document.createElement("style");
var head = document.getElementsByTagName("head")[0];
head.appendChild(style);
style.type = "text/css";
style.id = "some-id";
style.innerHTML = css;
但是,这样直接用 style.innerHTML 有两个问题:一是在 IE 8- 这样使用会出现错误,二是样式表中的一些特殊字符可能会导致问题,改用 innerText 或者 textContent 也许更好。
实际上,更稳妥的方法应该是从 css 内容创建一个子文本节点,然后添加到 style 元素中。例如:
var style = document.createElement("style");
var head = document.getElementsByTagName("head")[0];
head.appendChild(style);
style.type = "text/css";
style.id = "some-id";
if (style.styleSheet) { // IE8
style.styleSheet.cssText = css;
} else {
style.appendChild(document.createTextNode(css));
}
同样的,针对 IE8- 需要另外处理。
创建了样式表之后,如果需要添加或者删除某个样式规则,可以用如下的方式:
var style = document.getElementById("some-id"),
sheet = style.sheet || style.styleSheet;
if (sheet.insertRule) {
sheet.insertRule("body: {color: green;}", 0);
} else if (sheet.addRule) {
sheet.addRule("body", "color: green;", 0); // IE8-
}
if (sheet.deleteRule) {
sheet.deleteRule(0);
} else if (sheet.removeRule) {
sheet.removeRule(0); // IE8-
}
其中的参数 0 表示所插入或者删除的样式规则的位置。同样的,在 IE8- 中没有标准的 style.sheet 以及 sheet.insertRule 和 sheet.deleteRule,所以我们改用 IE 专有的方法。
参考资料:
[1] Creating Style Node, and IE headaches - Stack Overflow
[2] CSSStyleSheet.insertRule - Web API Interfaces | MDN
[3] CSSStyleSheet.deleteRule - Web API Interfaces | MDN
[4] IHTMLStyleSheet::addRule method (Internet Explorer)
[5] IHTMLStyleSheet::removeRule method (Internet Explorer)
用 JavaScript 修改样式元素的更多相关文章
- 用javascript修改html元素的class
document.getElementById("collins_contentWrp").className="content-wrp dict-container c ...
- JavaScript初步学习----基本使用,简单事件,修改样式,数据类型
JavaScript基本使用 JavaScript原名叫livescript,是一门动态类型,弱类型基于原型的脚本语言 用于页面特效,前后交替,后台开发(node) JavaScript写在s ...
- JavaScript基础之DOM修改样式
1.获取或设置元素的内容:3个属性: 1. innerHTML: 获取或设置元素开始标签到结束标签之间的所有HTML代码原文. 何时使用:只要获得完整的html代码原文时 优化 ...
- JavaScript DOM高级程序设计 5动态修改样式和层叠样式表2--我要坚持到底!
把样式置于DOM脚本之外 style属性 我们可以这样设置前景色之类的属性: element.style.color='red'; 也可以使用下面的代码设置背景颜色: element.style.ba ...
- 通过JS动态的修改HTML元素的样式和增添标签元素等
一. 通过JS动态的修改HTML元素的样式 1. 要想在js中动态的修改HTML元素的样式,首先需要写document, document我们称之为文档对象,这个对象中保存了当前网页中所有的 ...
- 动态修改 dom 元素的伪类样式
最近写代码,需要修改伪类的 content 属性,不想定义两个样式进行切换,而是直接通过 js 进行修改. html 中的伪类(如 a:hover / a:link / class::before / ...
- 周记5——随机撒花特效、动态修改伪元素样式、contenteditable属性、手机端调试利器VConsole、浏览器端debug调试
记录一些小零碎知识点,以便日后查看~ 1.随机撒花特效 教师节快到了,公司的产品提出一个需求:在IM(即时聊天)聊天界面弹出教师节的祝福“广告”,用户点击“发送祝福”按钮,聊天界面会随机撒花.这里的重 ...
- javascript学习(2)修改html元素和提示对话框
一.修改html元素 1.修改p元素 1.1.源代码 1.2.执行前 1.3.执行后 2.修改div元素的className 2.1.源代码 1.2.执行前 1.3.执行后 3.直接在当前位置输出内容 ...
- 总结:js中4类修改样式的方法
前言 最近在写一个扩展右键菜单的插件,既然是插件,想着一步到位,把相关的style样式设置都丢进js文件中,直接加载一个js文件便可以使用该插件,所以今天就研究了下js批量的插入样式的方法,即addS ...
随机推荐
- 服务器发布MVC常见问题解决方案
1 问题:IIS上部署MVC网站,打开后500错误:处理程序“ExtensionlessUrlHandler-Integrated-4.0”在其模块列表中有一个错误模块“ManagedPipelin ...
- UVa 10969 (圆与圆之间的覆盖问题) Sweet Dream
题意: 有n个按先后顺序放置的不同大小不同位置的圆,求所有可见圆弧的长度. 分析: 这道题应该是大白书上例题 LA 2572 (求可见圆盘的数量) Kanazawa 的加强版,整体框架都差不多. 对于 ...
- UVa 536 Tree Recovery
题意:给出一颗二叉树的前序遍历和中序遍历,输出其后序遍历 用杭电1710的代码改一点,就可以了. #include<iostream> #include<cstdio> #in ...
- 【打表】HDOJ-2089-不要62
[题目链接:HDOJ-2089] 多组测试数据,所以可以先算出符合条件的所有数保存数组中,输入时则直接遍历数组. #include<iostream> #include<cstrin ...
- JavaScript基础篇最全
本章内容: 简介 定义 注释 引入文件 变量 运算符 算术运算符 比较运算符 逻辑运算符 数据类型 数字 字符串 布尔类型 数组 Math 语句 条件语句(if.switch) 循环语句(for.fo ...
- HDU 4422 The Little Girl who Picks Mushrooms
题意:一共有5座山,已知小女孩在n座山采了n篮蘑菇,如果n小于5则在其他的山里采了任意重量的蘑菇,给出每篮蘑菇的重量,她回去的时候会遇到仨女巫要她交出三篮蘑菇的重量和恰好为1024的倍数,否则就把她的 ...
- MyBatis association的两种形式——MyBatis学习笔记之四
一.嵌套的resultMap 这 种方法本质上就是上篇博文介绍的方法,只是把教师实体映射从association元素中提取出来,用一个resultMap元素表示.然后 association元素再引用 ...
- HDU 4749-Parade Show(KMP变形)
题意: 给出一个母串和一个模式串求母串中最多能分成最大的子串数(每个字串中的各个数字的大小关系和模式串相同) 分析: KMP变形匹配规则变一下即可,用当前数字和下个数字的差表示,大小关系方便匹配 #i ...
- IAR编译信息分析
1.怎么设置可以查看单片的内存(消耗)使用状况? IAR的菜单栏 -->Tools -->IDE Options -->Messages -->Show build messa ...
- 基本输入输出系统BIOS---键盘输入
基本输入输出系统BIOS概述 硬盘操作系统DOS建立在BIOS的基础上,通过BIOS操纵硬件,例如DOS调用BIOS显示I/O程序完成输入显示,调用打印I/O完成打印输出 通常应用程序应该调用DOS提 ...