设置样式方法setStyle
浏览:1269次 出处信息
上周在微博上看到这样一条微博:
这个setStyle方法确实避免了mydiv.style.xxx这种写法大量重复的代码,确实代码简洁了不少,也很直观,但是这里还有一个问题,如果设置的样式一多,重复操作DOM无法避免,销毁原样式并重建都会增加浏览器的开销。我们可以先生成一个样式字符串,再一次性设置样式,这样可以尽量避免页面reflow。例如:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
//类型判断 var TypeC=window.TypeC||{}; (function(TC){ var toString = Object.prototype.toString; TC.isString = function(o) { return toString.call(o) === '[object String]'; }; TC.isObject = function(o) { return toString.call(o) === '[object Object]'; }; })(TypeC); function setStyle(el, style) {//style变量:{"display":"block","font-size":"28px","color":"red"} var sty=""; if (TypeC.isString(style)){ sty=style; }else if (TypeC.isObject(style)) { var s; for (s in style) { sty += s+":"+style[s]+";"; } } el.style.cssText +=";"+sty; } |
如果参数style传进来的是字符串,那么直接用cssText设置样式,如果是个对象,先将对象拼装成字符串,再用cssText设置样式;
这里使用了obj.style.cssText=“”;这种写法,
很蛋疼的是这里使用了这样一句:el.style.cssText +=”;”+sty;
原因是:obj.style.cssText=“”;这种写法会把原有的cssText清掉,比如原来的style中有’display:none;’,那么执行完上面的JS后,display就被删掉了。
为了解决这个问题,可以采用cssText累加的方法:
Element.style.cssText += ’width:100px;height:100px;top:100px;left:100px;’
但是,cssText(假如不为空)在IE中最后一个分号会被删掉,比较BT….
因此,上面cssText累加的方法在IE中是无效的。
最后,可以在前面添加一个分号来解决这个问题:
Element.style.cssText += ’;width:100px;height:100px;top:100px;left:100px;’
具体可以查看:用cssText批量修改样式[更新]
QQ技术交流群:445447336,欢迎加入!
扫一扫订阅我的微信号:IT技术博客大学习
扫一扫订阅我的微信号:IT技术博客大学习
<< 前一篇:user-select介绍
后一篇:IE兼容性bug汇总 >>
文章信息
- 作者:愚人码头 来源: WEB前端开发
- 标签: setStyle
- 发布时间:2012-01-27 18:04:32
近3天十大热文
- [66] Go Reflect 性能
- [66] Oracle MTS模式下 进程地址与会话信
- [65] 如何拿下简短的域名
- [59] IOS安全–浅谈关于IOS加固的几种方法
- [59] android 开发入门
- [59] 图书馆的世界纪录
- [58] 【社会化设计】自我(self)部分――欢迎区
- [53] 视觉调整-设计师 vs. 逻辑
- [47] 界面设计速成
- [47] 读书笔记-壹百度:百度十年千倍的29条法则