js中巧用cssText属性批量操作样式


Posted in Javascript onMarch 13, 2011

给一个HTML元素设置css属性,如

var head= document.getElementById("head"); 
head.style.width = "200px"; 
head.style.height = "70px"; 
head.style.display = "block";

这样写太罗嗦了,为了简单些写个工具函数,如
function setStyle(obj,css){ 
for(var atr in css){ 
obj.style[atr] = css[atr]; 
} 
} 
var head= document.getElementById("head"); 
setStyle(head,{width:"200px",height:"70px",display:"block"})

发现 Google API 中使用了cssText属性,后在各浏览器中测试都通过了。一行代码即可,实在很妙。如
var head= document.getElementById("head"); 
head.style.cssText="width:200px;height:70px;display:bolck";

和innerHTML一样,cssText很快捷且所有浏览器都支持。此外当批量操作样式时,cssText只需一次reflow,提高了页面渲染性能。

但cssText也有个缺点,会覆盖之前的样式。如

<div style="color:red;">TEST</div>

想给该div在添加个css属性width
div.style.cssText = "width:200px;";

这时虽然width应用上了,但之前的color被覆盖丢失了。因此使用cssText时应该采用叠加的方式以保留原有的样式。
function setStyle(el, strCss){ 
var sty = el.style; 
sty.cssText = sty.cssText + strCss; 
}

使用该方法在IE9/Firefox/Safari/Chrome/Opera中没什么问题,但由于 IE6/7/8中cssText返回值少了分号 会让你失望。

因此对IE6/7/8还需单独处理下,如果cssText返回值没";"则补上

function setStyle(el, strCss){ 
function endsWith(str, suffix) { 
var l = str.length - suffix.length; 
return l >= 0 && str.indexOf(suffix, l) == l; 
} 
var sty = el.style, 
cssText = sty.cssText; 
if(!endsWith(cssText, ';')){ 
cssText += ';'; 
} 
sty.cssText = cssText + strCss; 
}

相关:
http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSStyleDeclaration
https://developer.mozilla.org/en/DOM/CSSStyleDeclaration

Javascript 相关文章推荐
用javascript实现的支持lrc歌词的播放器
May 17 Javascript
js两行代码按指定格式输出日期时间
Oct 21 Javascript
Javascript遍历table中的元素示例代码
Jul 08 Javascript
分享20个提升网站界面体验的jQuery插件
Dec 15 Javascript
微信支付 JS API支付接口详解
Jul 11 Javascript
js实现一个简单的数字时钟效果
Mar 29 Javascript
详解基于webpack和vue.js搭建开发环境
Apr 05 Javascript
JavaScript门面模式详解
Oct 19 Javascript
angularjs实现猜大小功能
Oct 23 Javascript
element ui里dialog关闭后清除验证条件方法
Feb 26 Javascript
在Vuex使用dispatch和commit来调用mutations的区别详解
Sep 18 Javascript
用JavaScript实现贪吃蛇游戏
Oct 23 Javascript
js中获取事件对象的方法小结
Mar 13 #Javascript
js中关于new Object时传参的一些细节分析
Mar 13 #Javascript
重载toString实现JS HashMap分析
Mar 13 #Javascript
JavaScript获取页面上某个元素的代码
Mar 13 #Javascript
jQuery hover 延时器实现代码
Mar 12 #Javascript
js中if语句的几种优化代码写法
Mar 12 #Javascript
鼠标事件延时切换插件
Mar 12 #Javascript
You might like
PHP编程计算日期间隔天数的方法
2017/04/26 PHP
My Desktop :) 桌面式代码
2008/12/29 Javascript
js下利用控制器载入对应脚本
2010/07/17 Javascript
JS正则表达式大全(整理详细且实用)
2013/11/14 Javascript
js中AppendChild与insertBefore的用法详细解析
2013/12/16 Javascript
查找页面中所有类为test的结点的方法
2014/03/28 Javascript
Javascript添加监听与删除监听用法详解
2014/12/19 Javascript
js实现点击文本框显示日期选择器特效代码分享
2020/05/21 Javascript
js确认框confirm()用法实例详解
2016/01/07 Javascript
JS获取和修改元素样式的实例代码
2016/08/06 Javascript
Avalonjs双向数据绑定与监听的实例代码
2017/06/23 Javascript
Vue项目查看当前使用的elementUI版本的方法
2018/09/27 Javascript
jQuery实现的五星点评功能【案例】
2019/02/18 jQuery
vue实现把接口单独存放在一个文件方式
2020/08/13 Javascript
React冒泡和阻止冒泡的应用详解
2020/08/18 Javascript
如何区分vue中的v-show 与 v-if
2020/09/08 Javascript
vue 虚拟DOM的原理
2020/10/03 Javascript
python使用cPickle模块序列化实例
2014/09/25 Python
Python实现视频下载功能
2017/03/14 Python
django 2.0更新的10条注意事项总结
2018/01/05 Python
Python Selenium Cookie 绕过验证码实现登录示例代码
2018/04/10 Python
python利用多种方式来统计词频(单词个数)
2019/05/27 Python
Python 获取ftp服务器文件时间的方法
2019/07/02 Python
Python语法之精妙的十个知识点(装B语法)
2020/01/18 Python
Django ORM判断查询结果是否为空,判断django中的orm为空实例
2020/07/09 Python
Python调用REST API接口的几种方式汇总
2020/10/19 Python
python 基于UDP协议套接字通信的实现
2021/01/22 Python
改变生活的男士内衣:SAXX Underwear
2019/08/28 全球购物
Blue Nile中国官网:全球知名的钻石和珠宝网络零售商
2020/03/22 全球购物
什么造成了Java里面的异常
2016/04/24 面试题
优秀大学生职业生涯规划书
2014/02/27 职场文书
环保公益广告语
2014/03/13 职场文书
跑操口号
2014/06/12 职场文书
2019年特色火锅店的创业计划书模板
2019/08/28 职场文书
CSS预处理框架——Stylus
2021/04/21 HTML / CSS
Mysql的Table doesn't exist问题及解决
2022/12/24 MySQL