原生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实现图片放大缩小功能后进行复杂排序的方法
Nov 08 Javascript
jquery序列化表单以及回调函数的使用示例
Jul 02 Javascript
JS+CSS实现滑动切换tab菜单效果
Aug 25 Javascript
WEB前端开发都应知道的jquery小技巧及jquery三个简写
Nov 15 Javascript
详解JavaScript的回调函数
Nov 20 Javascript
JavaScript给每一个li节点绑定点击事件的实现方法
Dec 01 Javascript
在vue中使用vue-echarts-v3的实例代码
Sep 13 Javascript
JS面试题大坑之隐式类型转换实例代码
Oct 14 Javascript
5分钟快速看懂ES6中的反射与代理
Dec 19 Javascript
解决VUEX的mapState/...mapState等取值问题
Jul 24 Javascript
JavaScript读取本地文件常用方法流程解析
Oct 12 Javascript
JavaScript实现切换多张图片
Jan 27 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
便携利器 — TECSUN PL-365简评
2021/03/02 无线电
浅析PHP递归函数返回值使用方法
2013/02/18 PHP
thinkPHP查询方式小结
2016/01/09 PHP
CI(CodeIgniter)模型用法实例分析
2016/01/20 PHP
Zend Framework实现多文件上传功能实例
2016/03/21 PHP
PHP的时间戳与具体时间转化的简单实现
2016/06/13 PHP
php中namespace及use用法分析
2016/12/06 PHP
javascript setTimeout和setInterval 的区别
2009/12/08 Javascript
jQuery prev ~ siblings选择器使用介绍
2013/08/09 Javascript
jquery插件之定时查询待处理任务数量
2014/05/01 Javascript
JavaScript DOM进阶方法
2015/04/13 Javascript
基于JavaScript实现图片点击弹出窗口而不是保存
2016/02/06 Javascript
浅谈jquery的map()和each()方法
2016/06/12 Javascript
详谈Angular路由与Nodejs路由的区别
2017/03/05 NodeJs
解决VUEX刷新的时候出现数据消失
2017/07/03 Javascript
Vue2.0 实现歌手列表滚动及右侧快速入口功能
2018/08/08 Javascript
小程序实现自定义导航栏适配完美版
2019/04/02 Javascript
bootstrap-treeview实现多级树形菜单 后台JSON格式如何组织?
2019/07/26 Javascript
[00:43]DOTA2小紫本全民票选福利PA至宝全方位展示
2014/11/25 DOTA
[01:15]PWL S2开团时刻第二期——他们杀 我就白给
2020/11/25 DOTA
详解用Python处理HTML转义字符的5种方式
2017/12/27 Python
python实现识别手写数字 python图像识别算法
2020/03/23 Python
Python wxpython模块响应鼠标拖动事件操作示例
2018/08/23 Python
python base64库给用户名或密码加密的流程
2020/01/02 Python
python库skimage给灰度图像染色的方法示例
2020/04/27 Python
详解java调用python的几种用法(看这篇就够了)
2020/12/10 Python
Pandas之缺失数据的实现
2021/01/06 Python
法国房车租赁网站:Yescapa
2019/08/26 全球购物
学校消防安全制度
2014/01/30 职场文书
培训自我鉴定
2014/01/31 职场文书
电气自动化专业职业规划范文
2014/02/16 职场文书
小学优秀教师先进事迹材料
2014/12/16 职场文书
水电工岗位职责
2015/02/14 职场文书
安全教育片观后感
2015/06/17 职场文书
新学期开学标语2015
2015/07/16 职场文书
用python实现监控视频人数统计
2021/05/21 Python