javascript 动态修改样式和层叠样式表代码


Posted in Javascript onApril 27, 2010

W3C DOM2样式规则
==========================================================
CSSStyleSheet对象
  CSSStyleSheet对象表示的是所有CSS样式表,包括外部样式表和使用<style type="text/css"></style>标签指定的嵌入式样式表。
CSSStyleSheet同样构建于其他的DOM2 CSS对象基础之 上,而CSSStyleRule对象表示的则样式表中的每条规则。

通过document.stylesheets属性可以取得文档中CSSStyleSheet对象的列表,其中每个对象有下列属性

type

始终为text/css

disabled

相应样式表是应于还是禁用于当前文档
  href

样式表相对于当前文档的URL

title

分组样式标签

media

样式应用的目标设备类型(screen、print)

ownerRule

只读CSSRule对象,若样式用@import导入,表示其父规则

cssRules

 只读cssRuleList列表对象,包含样式表中所有CSSRule对象

==========================================================

insertRule(rule,index)

添加新的样式声明

deleteRule(index)

  从样式表中移除规则
CSSStyleRule对象

每个CSSStyleSheet对象内部包含着一组CSSStyleRule对象。这些对象分别对应着类似下面这样一条规则:

boyd{
 

font:lucida,verdana,sans-serif;

background:#c7600f;

color:#1a3800;

}
CSSStyleRule对象具有下列属性:

type

继承自CSSRule对象的一个属性,以0~6中的一个数字表示规则类型

cssText

以字符串形式表示的当前状态下的全部规则

parentStyleSheet

引用父CSSStyleRule对象

parentRule

  如果规则位于另一规则中,该属性引用另一个CSSRule对象

selectorText

包含规则的选择符

style

与HTMLElement.style相似,是CSSStyleDeclaration对象的一个实例
CSSStyleDeclaration对象

表示一个元素的style属性,与CSSStyleRule对象类似,CSSStyleDeclaration具有下面属性:

cssText

以字符串形式表示的全部规则

parentRule

将引用CSSStyleRule对象

==========================================================

getPropertyValue(propertyName)

CSS样式属性值

removeProperty(propertyName)

从声明中移除属性

setProperty(propertyName,value,priority)

设置CSS属性值
把样式置于DOM脚本之外
=========================================================
style属性

style属性本身是一个表示特定元素的所有不同CSS样式的CSSStyleDeclaration对象,通过style属性只能访问到在元素的style属性中以嵌入方式声明的CSS属性。换句话说,通过style属性无法访问到由多重样式表层叠而来或者从父元素继承的CSS属性。

element.style.backgroundColor = 'red';//background-color被转换为大小写形式,必须的 
//设置id为"example"的元素的样式 
setStyleById('example',{ 

'background-color' 
: 
'red', 

'border'


 :
'1px solid black', 

'padding'


 :
'1px', 

'margin'


 :
'1px' 
}); 
function setStyle(elementid,styles){  

var element = document.getElementById(elementid); 

//循环遍历styles对象并应用每个属性 

for(property in styles){ 


//非styles直接定义的属性 


if(!styles.hasOwnProperty(property)) continue; 


 


if(element.style.setProperty){ 



element.style.setProperty(uncamlize(property, '-'), styles[property], null); 


} else { 



element.style[camelize(property)] = styles[property]; 


} 

} 

 

return true; 
} 
//将word-word转换为wordWord 
function camelize(s) { 
return s.replace(/-(\w)/g, function(math,p1){ 
return p1.toUpperCase(); 
}); 
} 
//将wordWord转换为word-word 
function uncamelize(s, sep) { 
sep = sep || '-'; 
return s.replace(/([a-z])([A-Z])/g, function (match, p1, p2){ 
return p1 + sep + p2.toLowerCase(); 
}); 
} 
//基于className切换样式 
element.className += 'newclass';

访问计算样式

在修改一个元素的表现之前,你可能希望首先确定它当前的样式属性,由于元素的style属性只适用于以嵌入式方式定义的样式,因此无法通过style取得计算样式,DOM2规范在document.defaultView中包含一个名叫getComputedStyle()的方法,该方法返回一个只读的CSSStyleDeclaration对象,包含特定元素的所有计算样式,如下:

var styles = document.defaultView.getComputedStyle(element); 

var color = styles.getProperty('background-color');

但是Microsoft有自己的属性element.currentStyle版本
//取得一元素的计算样式 
function getStyle(element,property) { 
var value = element.style[camelize(property)]; 

if(!value) { 


if(document.defaultView && document.defaultView.getComputedStyle) { 



value = document.defaultView.getComputedStyle(element).getPropertyValue(property); 


} else if(element.currentStyle) { 



value = element.currentStyle[camelize(property)]; 

 
} 

} 

return value; 
}
Javascript 相关文章推荐
js生成动态表格并为每个单元格添加单击事件的方法
Apr 14 Javascript
jQuery带进度条全屏图片轮播特效代码分享
Jun 28 Javascript
微信小程序实现带刻度尺滑块功能
Mar 29 Javascript
微信小程序实现验证码获取倒计时效果
Feb 08 Javascript
使用vue2实现购物车和地址选配功能
Mar 29 Javascript
关于Google发布的JavaScript代码规范你要知道哪些
Apr 04 Javascript
解决koa2 ctx.render is not a function报错问题
Aug 07 Javascript
微信小程序module.exports模块化操作实例浅析
Dec 20 Javascript
深入理解Node内建模块和对象
Mar 12 Javascript
Vue使用Proxy监听所有接口状态的方法实现
Jun 07 Javascript
JavaScript键盘事件响应顺序详解
Sep 30 Javascript
如何在VUE中使用vue-awesome-swiper
Jan 04 Vue.js
js 绑定带参数的事件以及手动触发事件
Apr 27 #Javascript
javascript 模式设计之工厂模式学习心得
Apr 27 #Javascript
defer属性导致引用JQuery的页面报“浏览器无法打开网站xxx,操作被中止”错误的解决方法
Apr 27 #Javascript
jQuery Lightbox 图片展示插件使用说明
Apr 25 #Javascript
jQuery 表格工具集
Apr 25 #Javascript
基于JQuery.timer插件实现一个计时器
Apr 25 #Javascript
jquery+ashx无刷新GridView数据显示插件(实现分页、排序、过滤功能)
Apr 25 #Javascript
You might like
PHP函数in_array()使用详解
2014/08/20 PHP
PHP传参之传值与传址的区别
2015/04/24 PHP
php判断两个日期之间相差多少个月份的方法
2015/06/18 PHP
Zend Framework动作助手Redirector用法实例详解
2016/03/05 PHP
javascript Array.sort() 跨浏览器下需要考虑的问题
2009/12/07 Javascript
如何使用Javascript获取距今n天前的日期
2013/07/08 Javascript
window.onload使用指南
2015/09/13 Javascript
vue.js表格组件开发的实例详解
2016/10/12 Javascript
JS正则表达式修饰符global(/g)用法分析
2016/12/27 Javascript
JavaScript简单验证表单空值及邮箱格式的方法
2017/01/20 Javascript
jQuery中过滤器的基本用法示例
2017/10/11 jQuery
vue几个常用跨域处理方式介绍
2018/02/07 Javascript
vue-router重定向不刷新问题的解决
2018/06/25 Javascript
vue项目部署到Apache服务器中遇到的问题解决
2018/08/24 Javascript
你应该了解的JavaScript Array.map()五种用途小结
2018/11/14 Javascript
微信内置开发 iOS修改键盘换行为搜索的解决方案
2019/11/06 Javascript
Echarts.js无法引入问题解决方案
2020/10/30 Javascript
vue从后台渲染文章列表以及根据id跳转文章详情详解
2020/12/14 Vue.js
[42:20]2014 DOTA2华西杯精英邀请赛5 24 DK VS NewBee
2014/05/25 DOTA
[03:37]2015国际邀请赛第四日现场精彩集锦
2015/08/08 DOTA
Python学习笔记(二)基础语法
2014/06/06 Python
一些Centos Python 生产环境的部署命令(推荐)
2018/05/07 Python
python3使用SMTP发送HTML格式邮件
2018/06/19 Python
python3的url编码和解码,自定义gbk、utf-8的例子
2019/08/22 Python
windows+vscode安装paddleOCR运行环境的步骤
2020/11/11 Python
Python实现京东抢秒杀功能
2021/01/25 Python
使用css如何制作时间ICON方法实践
2012/11/12 HTML / CSS
英国电子专家:maplin
2019/09/04 全球购物
简述数组与指针的区别
2014/01/02 面试题
毕业生大学生活自我总结
2014/01/31 职场文书
募捐倡议书
2014/04/14 职场文书
感恩父母的演讲稿
2014/05/06 职场文书
学习教师敬业奉献模范事迹材料思想汇报
2014/09/19 职场文书
外贸业务员岗位职责
2015/02/13 职场文书
餐厅如何利用“营销策略”扭转亏本局面
2019/10/15 职场文书
Windows Server 2016 配置 IIS 的详细步骤
2022/04/28 Servers