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
相关文章
- prototype.js中的class.create()方法
- Vue04路由--SPA+ 使用路由建立多视图单页应用+router-link相关属性+【面试题:js中const,var,let区别】
- js 倒计时功能详解编程语言
- js中如何复制一个对象,如何获取所有属性和属性对应的值详解编程语言
- JS动态引入js、CSS动态创建script/link/style标签详解编程语言
- JS获取数组长度(length属性)
- JS display和visibility属性:显示和隐藏元素
- JS为元素添加自定义属性
- 图片从右至左滚动JS
- [js]javascript与剪贴板交互
- JavaScript入门教程(4)js浏览器对象
- JS函数验证总结(方便js客户端输入验证)
- js判断一个元素是否在页面中存在
- js获取坐标通过JS得到当前焦点(鼠标)的坐标属性
- jquery.bgiframe.js在IE9下提示INVALID_CHARACTER_ERR错误
- js鼠标点击事件在各个浏览器中的写法及Event对象属性介绍
- js实现无需数据库的县级以上联动行政区域下拉控件
- js动态调用css属性的小规律及实例说明
- js获取某元素的class里面的css属性值代码
- js构造函数、索引数组和属性的实现方式和使用
- js对象的复制继承实例
- js和jquery设置disabled属性为true使按钮失效