原生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 编写匿名函数的几种方法
Feb 21 Javascript
asp.net 30分钟掌握无刷新 Repeater
Sep 16 Javascript
Javascript 按位与运算符 (&amp;)使用介绍
Feb 04 Javascript
IntersectionObserver API 详解篇
Dec 11 Javascript
微信小程序picker组件简单用法示例【附demo源码下载】
Dec 05 Javascript
vue中使用cropperjs的方法
Mar 01 Javascript
axios发送post请求springMVC接收不到参数的解决方法
Mar 05 Javascript
Vue中v-show添加表达式的问题(判断是否显示)
Mar 26 Javascript
使用FileReader API创建Vue文件阅读器组件
Apr 03 Javascript
Element-ui之ElScrollBar组件滚动条的使用方法
Sep 14 Javascript
vue 基于element-ui 分页组件封装的实例代码
Dec 10 Javascript
浅谈目前可以使用ES10的5个新特性
Jun 25 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
BBS(php &amp; mysql)完整版(六)
2006/10/09 PHP
PHP 缓存实现代码及详细注释
2010/05/16 PHP
深入Nginx + PHP 缓存详解
2013/07/11 PHP
PHP判断手机是IOS还是Android
2015/12/09 PHP
php实现和c#一致的DES加密解密实例
2017/07/24 PHP
JavaScript setTimeout和setInterval的使用方法 说明
2010/03/25 Javascript
javascript获得服务器端控件的ID的实现代码
2011/12/28 Javascript
JS实现关键字搜索时的相关下拉字段效果
2014/08/05 Javascript
Nodejs实现批量下载妹纸图
2015/05/28 NodeJs
浅谈DOM的操作以及性能优化问题-重绘重排
2017/01/08 Javascript
vue 项目build错误异常的解决方法
2019/04/22 Javascript
js canvas实现星空连线背景特效
2019/11/01 Javascript
原生JS与JQ获取元素的区别详解
2020/02/13 Javascript
[00:13]天涯墨客二技能展示
2018/08/25 DOTA
下载安装setuptool和pip linux安装pip    
2014/01/24 Python
Python实现端口复用实例代码
2014/07/03 Python
Python脚本简单实现打开默认浏览器登录人人和打开QQ的方法
2016/04/12 Python
浅谈Python 中整型对象的存储问题
2016/05/16 Python
python实现随机梯度下降(SGD)
2020/03/24 Python
python 对象和json互相转换方法
2018/03/22 Python
Django重装mysql后启动报错:No module named ‘MySQLdb’的解决方法
2018/04/22 Python
Python import与from import使用及区别介绍
2018/09/06 Python
实例分析python3实现并发访问水平切分表
2018/09/29 Python
python 快速把超大txt文件转存为csv的实例
2018/10/26 Python
python中的逆序遍历实例
2019/12/25 Python
Wiggle美国:英国骑行、跑步、游泳、铁人三项商店
2018/10/27 全球购物
美国亚马逊旗下时尚女装网店:SHOPBOP(支持中文)
2020/10/17 全球购物
巴西购物网站:Onofre Agora
2020/06/08 全球购物
NHL官方在线商店:Shop.NHL.com
2020/05/01 全球购物
教师党性分析材料
2014/02/04 职场文书
开学典礼感言
2014/02/16 职场文书
高中生自我评价范文2015
2015/03/03 职场文书
2019年工作总结范文
2019/05/21 职场文书
分析JVM源码之Thread.interrupt系统级别线程打断
2021/06/29 Java/Android
windows11怎么查看wifi密码? win11查看wifi密码的技巧
2021/11/21 数码科技
Python绘制散乱的点构成的图的方法
2022/04/21 Python