原生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 相关文章推荐
javascript 异常处理使用总结
Jun 21 Javascript
javascript克隆对象深度介绍
Nov 20 Javascript
jQuery实现按键盘方向键翻页特效
Mar 18 Javascript
JavaScript 表单处理实现代码
Apr 13 Javascript
js拆分字符串并将分割的数据放到数组中的方法
May 06 Javascript
JQuery+Ajax实现数据查询、排序和分页功能
Sep 27 Javascript
js滚动条平滑移动示例代码
Mar 29 Javascript
JavaScript与ActionScript3两者的同性与差异性
Sep 22 Javascript
原生js实现新闻列表展开/收起全文功能
Jan 20 Javascript
JQuery实现table中tr上移下移的示例(超简单)
Jan 08 jQuery
如何在Node和浏览器控制台中打印彩色文字
Jan 09 Javascript
在elementui中Notification组件添加点击事件实例
Nov 11 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
ExtJS 2.0实用简明教程 之获得ExtJS
2009/04/29 Javascript
javascript下高性能字符串连接StringBuffer类
2010/08/16 Javascript
用jQuery实现一些导航条切换,显示隐藏的实例代码
2013/06/08 Javascript
jquery 滚动条事件简单实例
2013/07/12 Javascript
JS实现单击输入框弹出选择框效果完整实例
2015/12/14 Javascript
jquery div模态窗口的简单实例
2016/05/28 Javascript
JavaScript获取IP获取的是IPV6 如何校验
2016/06/12 Javascript
AngularJS中transclude用法详解
2016/11/03 Javascript
JavaScript调试之console.log调试的一个小技巧分享
2017/08/07 Javascript
什么是Vue.js框架 为什么选择它?
2017/10/17 Javascript
Three.js基础学习教程
2017/11/16 Javascript
详解vue 数据传递的方法
2018/04/19 Javascript
D3.js实现拓扑图的示例代码
2018/06/30 Javascript
vue中的router-view组件的使用教程
2018/10/23 Javascript
npm 语义版本控制详解
2019/09/10 Javascript
浅谈layui 表单元素的选中问题
2019/10/25 Javascript
layui前端时间戳转化实例
2019/11/15 Javascript
js如何验证密码强度
2020/03/18 Javascript
js实现3D旋转效果
2020/08/18 Javascript
开源软件包和环境管理系统Anaconda的安装使用
2017/09/04 Python
详谈pandas中agg函数和apply函数的区别
2018/04/20 Python
简单了解python关系(比较)运算符
2019/07/08 Python
TFRecord格式存储数据与队列读取实例
2020/01/21 Python
CSS3 渐变(Gradients)之CSS3 径向渐变
2016/07/08 HTML / CSS
澳大利亚的奢侈品牌:Oroton
2016/08/26 全球购物
ProBikeKit英国:在线公路自行车之家
2017/02/10 全球购物
Otticanet英国:最顶尖的世界名牌眼镜, 能得到打折季的价格
2019/02/10 全球购物
产假请假条
2014/04/10 职场文书
幼儿园教师师德师风演讲稿:我自豪我是一名幼师
2014/09/10 职场文书
党员评议思想汇报
2014/10/08 职场文书
业务员岗位职责
2015/02/03 职场文书
小学语文的各类谚语(70首)
2019/08/15 职场文书
提升Nginx性能的一些建议
2021/03/31 Servers
python基于scrapy爬取京东笔记本电脑数据并进行简单处理和分析
2021/04/14 Python
详解Flask开发技巧之异常处理
2021/06/15 Python
Java使用jmeter进行压力测试
2021/07/09 Java/Android