Swift51.com
麦子学院 头像
麦子学院  2017-02-25 10:37

使用原生javascript读写CSS样式

回复:0  查看:3968  
一说起操作css 样式很多人都会想到 jQuery css 方法: $(selector).css(name)  ,但是有思考过如何使用原生javascript 来实现类似的功能么?本文和大家分享的就是使用原生javascript 实现 css 样式相关内容,一起来看看吧,希望对大家 学习javascript有所帮助。
  大家最熟悉的原生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 的区别?
  既然都是获取样式属性的值,它们有啥区别呢:
  1. 只读与可写
  getComputedStyle 方法是只读的,只能获取样式而不能设置,但是 element.style 既能读也能写。
  2. 获取的对象范围
  getComputedStyle 方法获取的是最终应用在元素上的所有 CSS 属性对象(即使没有 CSS 代码,也会把默认的祖宗八代都显示出来);而 element.style 只能获取元素 style 属性中的 CSS 样式。因此对于一个光秃秃的元素
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;";

来源: 悟空的博客