原生javascript实现读写CSS样式的方法详解


Posted in Javascript onFebruary 20, 2017

前言

可能大家一说起操作css样式,很多人都会想到jQuery的css方法:$(selector).css(name) ,但是有思考过如何使用原生js来实现类似的功能么?

大家最熟悉的原生js操作样式的方法非DOM中的Style对象莫属了,但是这个方法只能获取和修改html文档中的内联样式,无法操作非内联样式(内部样式和外部样式表)。

我通过搜索和整理,总结了使用原生js对css样式的读写实现。下面话不多说,来看看详细的介绍吧。

获取样式

1. dom style

这个方法只能获取内联样式:

var text = document.getElementById('text');
var textColor = text.style.color;

// 得到textColor的值为 '#000'

2. currentStyle

这个方法只适用于IE浏览器,在形式上与element.style相近,区别在于正如currentStyle其名——目前的样式(css加载后的样式),返回的是元素当前最终的CSS属性值,包括了内部style标签里的样式和外部引入的css文件。

用法:元素.currentStyle.属性

比如我们要获取id为box的width:

var boxWidth = document.getElementById('box').currentStyle.width;

// 得到boxWidth的值为 '200px'

3. getComputedStyle

getComputedStyle是一个可以获取当前元素所有最终使用的CSS属性值。返回的是一个CSS样式声明对象([object CSSStyleDeclaration]),并且是只读的。

在兼容性上,基本支持:Chrome、Firfox、IE9、Opera、Safari

用法:getComputedStyle(元素, 伪类).属性,第二个参数如果不是伪类就设置为null吧。

var el = document.getElementById("box");
var style = window.getComputedStyle(el , ":after");

来~封装一个通用的获取样式的函数

为了适用于各大主流浏览器,我们来写一个函数:

// 这个函数需要传递两个参数:元素对象和样式属性名称

function getStyle(el, styleName) {

 if( el.currentStyle ) {
 
 // for IE
 return el.currentStyle[styleName];
 
 } else {
 
 // for peace
 return getComputedStyle(el, false)[styleName];
 }
 
}

接着调用这个函数来获取box的宽度:

var box = document.getElementById("box");

var boxWidth = getStyle(box, 'width');

这个函数并没有考虑到对伪类的相关操作,可以根据需要自行扩展~

getComputedStyle与style的区别?

既然都是获取样式属性的值,它们有啥区别呢:

只读与可写

getComputedStyle方法是只读的,只能获取样式而不能设置,但是element.style既能读也能写。

获取的对象范围

getComputedStyle方法获取的是最终应用在元素上的所有CSS属性对象(即使没有CSS代码,也会把默认的祖宗八代都显示出来);而element.style只能获取元素style属性中的CSS样式。因此对于一个光秃秃的元素<p>,getComputedStyle方法返回对象中length属性值(如果有)就是190+(据我测试FF:192, IE9:195, Chrome:253, 不同环境结果可能有差异), 而element.style就是0。

引用自——张鑫旭博客文章

设置样式

1. dom style

这个不用说了吧,比如把元素的背景颜色改为红色:

var el = document.getElementById('box');
el.style.backgroundColor = 'red';

2. cssText属性

cssText 的本质就是设置 HTML 元素的 style 属性值。它是一组样式属性及其值的文本表示。这个文本格式化为一个 CSS 样式表,去掉了包围属性和值的元素选择器的花括号。

它的用法和innerHTML类似: document.getElementById("d1").style.cssText = "color:red; font-size:13px;";

详细请参考: CSSRule.cssText - Web APIs | MDN

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家学习或者使用Javascript能带来一定的帮助,如果有疑问大家可以留言交流。谢谢大家对三水点靠木的支持。

Javascript 相关文章推荐
JS如何将UTC格式时间转本地格式
Sep 04 Javascript
Node.js中使用mongoskin操作mongoDB实例
Sep 28 Javascript
深入浅析JavaScript中数据共享和数据传递
Apr 25 Javascript
javascript中递归的两种写法
Jan 17 Javascript
详解如何解决Vue和vue-template-compiler版本之间的问题
Sep 17 Javascript
微信小程序全局变量功能与用法详解
Jan 22 Javascript
TypeScript开发Node.js程序的方法
Apr 30 Javascript
JS查找孩子节点简单示例
Jul 25 Javascript
基于layui轮播图满屏是高度自适应的解决方法
Sep 16 Javascript
javascript跳转与返回和刷新页面的实例代码
Nov 20 Javascript
微信小程序添加插屏广告并设置显示频率(一天一次)
Dec 06 Javascript
vue项目前端微信JSAPI与外部H5支付相关实现过程及常见问题
Apr 14 Javascript
JS实现中国公民身份证号码有效性验证
Feb 20 #Javascript
js中new一个对象的过程
Feb 20 #Javascript
利用node.js搭建简单web服务器的方法教程
Feb 20 #Javascript
jQuery实现鼠标跟随效果
Feb 20 #Javascript
BootStrap fileinput.js文件上传组件实例代码
Feb 20 #Javascript
Bootstrap jquery.twbsPagination.js动态页码分页实例代码
Feb 20 #Javascript
分享一道关于闭包、bind和this的面试题
Feb 20 #Javascript
You might like
PHP XML备份Mysql数据库
2009/05/27 PHP
FireFox浏览器使用Javascript上传大文件
2013/10/30 PHP
Laravel实现自定义错误输出内容的方法
2016/10/10 PHP
Laravel中日期时间处理包Carbon的简单使用
2017/09/21 PHP
thinkphp5.0整合phpsocketio完整攻略(绕坑)
2018/10/12 PHP
一个刚完成的layout(拖动流畅,不受iframe影响)
2007/08/17 Javascript
模拟jQuery中的ready方法及实现按需加载css,js实例代码
2013/09/27 Javascript
jQuery中has()方法用法实例
2015/01/06 Javascript
js实现checkbox全选、不选与反选的方法
2015/02/09 Javascript
使用jQuery制作浮动工具栏的实例分享
2016/05/13 Javascript
JavaScript如何实现跨域请求
2016/08/05 Javascript
轻松掌握JavaScript中介者模式
2016/08/26 Javascript
浅谈webpack对样式的处理
2018/01/05 Javascript
使用live-server快速搭建本地服务器+自动刷新的方法
2018/03/09 Javascript
nodejs 简单实现动态html的方法
2018/05/12 NodeJs
node 命令方式启动修改端口的方法
2018/05/12 Javascript
jquery选择器和属性对象的操作实例分析
2020/01/10 jQuery
node crawler如何添加promise支持
2020/02/01 Javascript
javascrpt密码强度校验函数详解
2020/03/18 Javascript
vue输入框使用模糊搜索功能的实现代码
2020/05/26 Javascript
python基础教程之简单入门说明(变量和控制语言使用方法)
2014/03/25 Python
使用Mixin设计模式进行Python编程的方法讲解
2016/06/21 Python
ubuntu安装sublime3并配置python3环境的方法
2018/03/15 Python
python内置模块collections知识点总结
2019/12/19 Python
python 对一幅灰度图像进行直方图均衡化
2020/10/27 Python
阿拉伯书店:Jamalon
2019/07/24 全球购物
大学生职业规划范文:象牙塔生活的四年计划
2014/01/14 职场文书
九年级历史教学反思
2014/01/27 职场文书
优秀团干部个人事迹
2014/05/29 职场文书
学校四风问题对照检查材料思想汇报
2014/09/26 职场文书
陪护人员误工证明
2015/06/24 职场文书
车辆挂靠协议书
2016/03/23 职场文书
python引入其他文件夹下的py文件具体方法
2021/05/23 Python
详解Python生成器和基于生成器的协程
2021/06/03 Python
利用Python读取微信朋友圈的多种方法总结
2021/08/23 Python
Nginx使用ngx_http_upstream_module实现负载均衡功能示例
2022/08/05 Servers