cssText

这个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 += ’100px;height:100px;top:100px;left:100px;’

但是,cssText(假如不为空)在IE中最后一个分号会被删掉,比较BT….
因此,上面cssText累加的方法在IE中是无效的。

最后,可以在前面添加一个分号来解决这个问题:

Element.style.cssText += ’;100px;height:100px;top:100px;left:100px;’

具体可以查看:用cssText批量修改样式[更新]

 

用cssText批量修改样式[更新]

一般情况下我们用js设置元素对象的样式会使用这样的形式:

var element= document.getElementById(“id”);
element.style.width=”20px”;
element.style.height=”20px”;
element.style.border=”solid 1px red”;

样式一多,代码就很多;而且通过JS来覆写对象的样式是比较典型的一种销毁原样式并重建的过程,这种销毁和重建,都会增加浏览器的开销。

js中有一个cssText的方法:

语法为:obj.style.cssText(“样式”);

obj.style.cssText=”样式”;

上面的代码我们可以修改成:感谢sliuqin的在留言中的斧正

element.style.cssText(“20px;height:20px;border:solid 1px red;”)

element.style.cssText=”20px;height:20px;border:solid 1px red;”;

这样就可以尽量避免页面reflow,提高页面性能。

——以下内容2009年10月10日更新,来自http://blog.xhlv.com/2009/09/csstext-ie-bug/-——————-

但是,这样会有一个问题,会把原有的cssText清掉,比如原来的style中有’display:none;’,那么执行完上面的JS后,display就被删掉了。
为了解决这个问题,可以采用cssText累加的方法:

Element.style.cssText += ‘100px;height:100px;top:100px;left:100px;’

但是,cssText(假如不为空)在IE中最后一个分号会被删掉,比较BT….
因此,上面cssText累加的方法在IE中是无效的。

最后,可以在前面添加一个分号来解决这个问题:

Element.style.cssText += ‘;100px;height:100px;top:100px;left:100px;’

Posted in JS Tagged  5 Comments

Posted in JS Tagged  Leave a comment

原文地址:https://www.cnblogs.com/love-Z/p/4481290.html