Javascript高级编程学习笔记(51)—— DOM2和DOM3(3)操作样式表
操作样式表
在JS中样式表用一种类型来表示,以便我们在JS对其进行操作
这一类型就是CSSStyleSheet 即CSS样式表类型,包括了之前 style 对象所不包括的外部样式表以及嵌入样式表
其中<link>以HTMLLinkElement 类型表示
而<style> 以HTMLStyleELement类型表示
但是这两类样式表更加通用的类型则是继承自 StyleSheet 类型的 CSSStyleSheet
其中继承自 StyleSheet 类型的有以下属性:
disabled:表示样式表是否被禁用,该属性可写
href:若是通过<link>引入的样式表,该属性的值则为样式表的 URL 否则为 null
media:当前样式表支持的媒体集合类型,若该集合为空列表则表示样式表适用于所有媒体
ownerNode:指向拥有当前样式表的节点的指针,若样式表通过 @import 导入则该属性的值为 null
parentStyleSheet:若当前样式表通过 @import 引入则指向引入它的样式表
title:ownerNode中的title属性的值
type:表示样式表类型的字符串,如“type/css”
cssRules:样式表中包含样式规则的集合
ownerRule:若通过@imoprt 引入则指向导入的规则
deleteRule(index):删除cssRules中指定位置的规则
insertRule(rule,index):向cssRules指定位置插入规则
至于每个文档的StyleSheet类型则可以通过以下代码访问
document.styleSheets[i]
每个styleSheet类型则都拥有以上的属性和方法
CSS规则
CSSRule 对象表示样式表中的每一条规则
CSSRule 是一个供其它多种类型继承的基类,其中CSSStyleRule就继承自该基类,用于表示样式表信息
CSSStyleRule拥有以下属性:
- cssText:返回整条规则的对应文本
- parentRuel:如果当前规则是导入的规则,则这个属性就是导入的规则,否则为null
- parentStyleSheet:当前规则所属样式表
- selectorText:返回当前规则的选择符文本
- style:一个CSSStyleDeclaration 对象,可以通过该对象修改设置和取得规则中的值
- type:表示规则类型的常量值,对于CSS规则来说该值为1
PS. 这里的cssText属性与style对象的cssText存在差异,也就是这里的cssText不能进行写操作,而style对象的cssText可以被重写
这里和style对象的区别在于,style修改的样式只应用于当前元素,而CSSRule修改的规则则会应用于所有被选择符选中的元素
创建规则
DOM规定要向现有样式表添加规则需使用 insertRule()方法
该方法接收两个参数,规则、插入规则的位置
document.styleSheets[0].insertRule("body{background-color:red}",0);
上述代码表示向当前文档的第一个样式表插入一条规则将body的背景颜色设置为红色
低版本IE不支持该方法,但支持另一种类似的实现:
document.styleSheets[0].addRule("body","background-color:red",0);//IE8及以下
并且addRule添加的规则有限制,最多添加4095条样式规则,超出该上限的调用将会导致错误
删除规则
非低版本IE:
document.styleSheets[0].deleteRule(0);//删除第一个样式表的第一条规则
低版本IE:
document.styleSheets[0].removeRule(0);// IE8及以下
跨浏览器写法
针对上方添加、删除的差异可以使用以下跨浏览器写法:
// 参数:1.样式表 2.选择符 3.css规则文本 4.插入位置
function insertRule(sheet, selectorText, cssText, position){
if(sheet.insertRule){
sheet.insertRule(selectorText + "{" + cssText +"}",position);
}else if(sheet.addRule){
sheet.addRule(selectorText,cssText,position);
}
} // 参数 1.样式表 2.要删除规则的位置
function deleteRule(sheet,index){
if(sheet.deleteRule){
sheet.deleteRule(index);
}else if(sheet.removeRule){
sheet.removeRule(index);
}
}
Javascript高级编程学习笔记(51)—— DOM2和DOM3(3)操作样式表的更多相关文章
- Javascript高级编程学习笔记(82)—— 富文本操作(2)
操作富文本 与富文本编辑器的交互的主要方式就是使用 document.execCommand() 方法 该方法可以对文档执行自定义命令,并且可以应用大多数格式 该方法接收三个参数: 要执行命令的名称 ...
- 《JavaScript高级程序设计》笔记:DOM2和DOM3(十二)
DOM1级主要定义的是HTML和XML文档的底层结构.DOM2级和DOM3级在这个结构基础上引入了更多的交互能力,也支持更高级的XML特性.为此DOM2级和DOM3级分为了很多的模块(模块直接具有某种 ...
- Javascript高级编程学习笔记(49)—— DOM2和DOM3(1)DOM变化
DOM变化 我们知道DOM有许多的版本,其中DOM0和DOM2这两个级别以对事件的纳入标准而为人所知 但是呢,这里不讲事件,在后面会有专门和事件有关的部分作为详细讲解 这里就只讲一下DOM2和DOM3 ...
- Javascript高级编程学习笔记(1)—— JS简介
此系列文章,用于记录所学,如有错误欢迎指出. Javascript组成 1.核心(ECMAScript) 2.文档对象模型(DOM) 3.浏览器对象模型(BOM) 1.核心(ECMAScript) E ...
- Javascript高级编程学习笔记(61)—— 事件(5)UI事件
UI事件 UI事件是指那些不一定与用户操作有关的事件 这些事件在DOM规范出现之前,都是以各种不同的形式存在于不同的浏览器 而在DOM事件中为了保证向后兼容,现有的UI事件如下: DOMActivat ...
- Javascript高级编程学习笔记(53)—— DOM2和DOM3(5)遍历
遍历 “DOM2级遍历和范围” 定义了两个用于辅助完成顺序遍历的DOM结构类型 NodeIterator 和 TreeWalk 上述两种类型可以基于给定起点的DOM结构执行深度优先的遍历操作 对于检测 ...
- Javascript高级编程学习笔记(54)—— DOM2和DOM3(6)范围选择
范围 为了让开发人员更加方便地控制页面“DOM2级遍历和范围”模块定义了“范围”接口 通过该接口开发人员可以选择文档中的一个区域,而不必考虑元素的界限 在常规操作不能有效地修改文档时,使用范围往往可以 ...
- Javascript高级编程学习笔记(52)—— DOM2和DOM3(4)元素大小
在日常实践中,我们在使用JS的时候难免会需要获取元素的大小及位置 首先要声明的是,这一部分的内容并不属于DOM2样式规范,因为DOM中并没有对我们如何获取元素大小的相关信息做出规范 偏移量 偏移量及元 ...
- Javascript高级编程学习笔记(50)—— DOM2和DOM3(2)样式
样式 在HTML中定义元素的方式有以下三种: 1.link标签引入外部样式表 2.style标签定义嵌入样式 3.通过JS中对style特性定义元素样式(行内样式) “DOM2级样式”围绕上述样式机制 ...
随机推荐
- Win7远程桌面:发生身份验证错误
下载并安装KB4103718补丁,安装完成后重启计算机 http://www.catalog.update.microsoft.com/Search.aspx?q=KB4103718 根据操作系统选择 ...
- 使用QML绘制界面
1 使用QML设计登录界面 https://www.cnblogs.com/bhlsheji/p/5324871.html 2 使用QML实现下拉列表框 https://blog.csdn.net/ ...
- Hello The Merciless World!
这里是一名FJ蒟蒻OIer的Blog,ID在上面自己不会看嘛QAQQQ是GldHkkowo(很随性的名字w 联系方式:QQ:735900335 加 Q Q 看 蒟 蒻 WA 题 爱好? 死宅的爱好是什 ...
- 《Java并发编程的艺术》Java内存模型(三)
Java内存模型 一.Java内存模型的基础 1.并发编程模型的两个关键问题: 两个关键问题,线程之间如何通信和如何同步.两种方式,共享内存和消息传递.Java里线程的通信是通过共享内存,线程的同步是 ...
- linux端口详解大全
0|无效端口,通常用于分析操作系统 1|传输控制协议端口服务多路开关选择器 2|管理实用程序 3|压缩进程 5|远程作业登录 7|回显 9|丢弃 11|在线用户 13|时间 17|每日引用 18|消息 ...
- Chapter5_初始化与清理_数组初始化与可变参数列表
一.数组初始化 数组是相同类型的,用一个标识符名称封装到一起的一个对象序列或基本类型数据序列.编译器是不允许指定数组的长度的,当使用语句int[] a时,拥有的只是一个符号名,即一个数组的引用,并不拥 ...
- Chapter5_初始化与清理_用构造器初始化
接下来进入第五章,java中初始化和清理的问题,这是两个涉及安全的重要命题.初始化的功能主要是为库中的构件(或者说类中的域)初始化一些值,清理的功能主要是清除程序中不再被需要的元素,防止资源过分被垃圾 ...
- python第三天基础之字符编码
一 了解字符编码的知识储备 1. 文本编辑器存取文件的原理(nodepad++,pycharm,word) 打开编辑器就打开了启动了一个进程,是在内存中的,所以在编辑器编写的内容也都是存放与内存中的, ...
- php如何实现原址排序数组使奇数位于偶数前面(代码)
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变. 1.遍历数组,判断元素奇数偶数 ...
- ELK的文档搭建
一.安装elasticsearch 官网:https://www.elastic.co/guide/index.html https://www.elastic.co/guide/en/elastic ...