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 相关文章推荐
js 鼠标拖动对象 可让任何div实现拖动效果
Nov 09 Javascript
js切换光标示例代码
Oct 10 Javascript
JS 获取浏览器和屏幕宽高等信息代码
Mar 31 Javascript
javascript检查浏览器是否支持flash的实现代码
Aug 14 Javascript
js实现简单秒表走动的时钟特效
Mar 25 Javascript
js 创建对象 经典模式全面了解
Aug 16 Javascript
jQuery 插件实现随机自由弹跳气泡样式
Jan 12 Javascript
JavaScript实现简单的四则运算计算器完整实例
Apr 28 Javascript
vue router使用query和params传参的使用和区别
Nov 13 Javascript
javascript使用正则实现去掉字符串前面的所有0
Jul 23 Javascript
详解javascript脚本何时会被执行
Feb 05 Javascript
如何使JavaScript休眠或等待
Apr 27 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获取本周第一天和最后一天示例代码
2014/02/24 PHP
mantis安装、配置和使用中的问题小结
2014/07/14 PHP
php函数传值的引用传递注意事项分析
2016/06/25 PHP
Ext第一周 史上最强学习笔记---GridPanel(基础篇)
2008/12/29 Javascript
js对数字的格式化使用说明
2011/01/12 Javascript
JavaScript+CSS控制打印格式示例介绍
2014/01/07 Javascript
iframe里使用JavaScript控制主页转向的方法
2015/04/03 Javascript
jQuery 常用代码集锦(必看篇)
2016/05/16 Javascript
详解Nodejs之静态资源处理
2017/06/05 NodeJs
angularjs利用directive实现移动端自定义软键盘的示例
2017/09/20 Javascript
Bootstrap一款超好用的前端框架
2017/09/25 Javascript
vue2实现数据请求显示loading图
2017/11/28 Javascript
vue通过style或者class改变样式的实例代码
2018/10/30 Javascript
Vue 页面状态保持页面间数据传输的一种方法(推荐)
2018/11/01 Javascript
JavaScript实现邮箱后缀提示功能的示例代码
2018/12/13 Javascript
如何在vue里面优雅的解决跨域(路由冲突问题)
2019/01/20 Javascript
vue+vant实现商品列表批量倒计时功能
2020/01/13 Javascript
vue.js页面加载执行created,mounted的先后顺序说明
2020/11/07 Javascript
pygame游戏之旅 添加游戏介绍
2018/11/20 Python
django admin 自定义替换change页面模板的方法
2019/08/23 Python
详解基于python的全局与局部序列比对的实现(DNA)
2020/10/07 Python
python3实现语音转文字(语音识别)和文字转语音(语音合成)
2020/10/14 Python
BONIA波尼亚新加坡官网:皮革手袋,鞋类和配件
2016/08/25 全球购物
VisionPros美国站:加拿大在线隐形眼镜和眼镜零售商
2020/02/11 全球购物
求∏的近似值,直到最后一项的绝对值小于指定的数
2016/02/12 面试题
2013年高中生自我评价
2013/10/23 职场文书
篝火晚会策划方案
2014/05/16 职场文书
岗位安全生产责任书
2014/07/28 职场文书
高校师德师风自我剖析材料
2014/09/29 职场文书
电子银行业务授权委托书
2014/10/10 职场文书
2015年教师节活动总结
2015/03/20 职场文书
节约用电倡议书
2015/04/28 职场文书
2016年教师政治思想表现评语
2015/12/02 职场文书
2016全国“质量月”活动标语口号
2015/12/26 职场文书
golang中切片copy复制和等号复制的区别介绍
2021/04/27 Golang
Python编解码问题及文本文件处理方法详解
2021/06/20 Python