IT技术博客大学习 共学习 共进步
全部 移动开发 后端 数据库 AI 算法 安全 DevOps 前端 设计 开发者

设置样式方法setStyle

WEB前端开发 2012-01-27 18:04:32 累计浏览 1,958 次
本机暂存

上周在微博上看到这样一条微博:

原图已失效

这个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批量修改样式[更新]

同分类推荐文章

  1. translateZ() (2026-06-25 21:18:56)
  2. translateY() (2026-06-25 21:17:56)
  3. translateX() (2026-06-25 21:16:01)

查看更多 前端 文章 →

建议继续学习

  1. 如何成为Python高手 (累计阅读 54,992)
  2. JQuery实现Excel表格呈现 (累计阅读 48,346)
  3. 50个活力和动感的网页设计-颜色的灵感 (累计阅读 34,441)
  4. 深入理解Javascript之执行上下文(Execution Context) (累计阅读 18,401)
  5. 从输入 URL 到页面加载完成的过程中都发生了什么事情? (累计阅读 15,931)
  6. 图片动态局部毛玻璃模糊效果的实现 (累计阅读 14,845)
  7. 天朝第二代身份证号码的验证机制 (累计阅读 14,760)
  8. HTML 5 的data-* 自定义属性 (累计阅读 14,348)
  9. 分享一个JQUERY颜色选择插件 (累计阅读 14,222)
  10. 什么是全栈工程师? (累计阅读 14,035)