zl程序教程

您现在的位置是:首页 >  后端

当前栏目

js中巧用cssText属性批量操作样式

JS属性批量 操作 样式 巧用 cssText
2023-06-13 09:14:27 时间
给一个HTML元素设置css属性,如
复制代码代码如下:

varhead=document.getElementById("head");
head.style.width="200px";
head.style.height="70px";
head.style.display="block";

这样写太罗嗦了,为了简单些写个工具函数,如
复制代码代码如下:

functionsetStyle(obj,css){
for(varatrincss){
obj.style[atr]=css[atr];
}
}
varhead=document.getElementById("head");
setStyle(head,{width:"200px",height:"70px",display:"block"})

发现GoogleAPI中使用了cssText属性,后在各浏览器中测试都通过了。一行代码即可,实在很妙。如
复制代码代码如下:
varhead=document.getElementById("head");
head.style.cssText="width:200px;height:70px;display:bolck";

和innerHTML一样,cssText很快捷且所有浏览器都支持。此外当批量操作样式时,cssText只需一次reflow,提高了页面渲染性能。

但cssText也有个缺点,会覆盖之前的样式。如
复制代码代码如下:
<divstyle="color:red;">TEST</div>

想给该div在添加个css属性width
复制代码代码如下:
div.style.cssText="width:200px;";

这时虽然width应用上了,但之前的color被覆盖丢失了。因此使用cssText时应该采用叠加的方式以保留原有的样式。
复制代码代码如下:
functionsetStyle(el,strCss){
varsty=el.style;
sty.cssText=sty.cssText+strCss;
}

使用该方法在IE9/Firefox/Safari/Chrome/Opera中没什么问题,但由于IE6/7/8中cssText返回值少了分号会让你失望。

因此对IE6/7/8还需单独处理下,如果cssText返回值没";"则补上
复制代码代码如下:
functionsetStyle(el,strCss){
functionendsWith(str,suffix){
varl=str.length-suffix.length;
returnl>=0&&str.indexOf(suffix,l)==l;
}
varsty=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