setstyle+java_设置样式方法setStyle

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

89eea668c4acf508e75983c975486861.png

这个setStyle方法确实避免了mydiv.style.xxx这种写法大量重复的代码,确实代码简洁了不少,也很直观,但是这里还有一个问题,如果设置的样式一多,重复操作DOM无法避免,销毁原样式并重建都会增加浏览器的开销。我们可以先生成一个样式字符串,再一次性设置样式,这样可以尽量避免页面reflow。例如:

[cc?lang=”javascript” width=”630″ tab_size=”4″ ?]

//类型判断

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;

}

[/cc]

如果参数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;’

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值