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


Posted in Javascript onMarch 13, 2011

给一个HTML元素设置css属性,如

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

这样写太罗嗦了,为了简单些写个工具函数,如
function setStyle(obj,css){ 
for(var atr in css){ 
obj.style[atr] = css[atr]; 
} 
} 
var head= document.getElementById("head"); 
setStyle(head,{width:"200px",height:"70px",display:"block"})

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

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

但cssText也有个缺点,会覆盖之前的样式。如

<div style="color:red;">TEST</div>

想给该div在添加个css属性width
div.style.cssText = "width:200px;";

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

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

因此对IE6/7/8还需单独处理下,如果cssText返回值没";"则补上

function setStyle(el, strCss){ 
function endsWith(str, suffix) { 
var l = str.length - suffix.length; 
return l >= 0 && str.indexOf(suffix, l) == l; 
} 
var sty = 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

Javascript 相关文章推荐
Jquery 绑定时间实现代码
May 03 Javascript
js replace正则表达式应用案例讲解
Jan 17 Javascript
jQuery控制输入框只能输入数值的小例子
Mar 20 Javascript
防止xss和sql注入:JS特殊字符过滤正则
Apr 18 Javascript
web css实现整站样式互相切换
Oct 29 Javascript
JavaScript通过使用onerror设置默认图像显示代替alt
Mar 01 Javascript
AngularJS基础 ng-if 指令用法
Aug 01 Javascript
jquery实现折叠菜单效果【推荐】
Mar 08 Javascript
Vue.js学习笔记之常用模板语法详解
Jul 25 Javascript
vue cli 3.0 搭建项目的图文教程
May 17 Javascript
js+canvas实现简单扫雷小游戏
Jan 22 Javascript
vue实现把接口单独存放在一个文件方式
Aug 13 Javascript
js中获取事件对象的方法小结
Mar 13 #Javascript
js中关于new Object时传参的一些细节分析
Mar 13 #Javascript
重载toString实现JS HashMap分析
Mar 13 #Javascript
JavaScript获取页面上某个元素的代码
Mar 13 #Javascript
jQuery hover 延时器实现代码
Mar 12 #Javascript
js中if语句的几种优化代码写法
Mar 12 #Javascript
鼠标事件延时切换插件
Mar 12 #Javascript
You might like
Mysql的Root密码忘记,查看或修改的解决方法(图文介绍)
2013/06/14 PHP
PHP JSON出错:Cannot use object of type stdClass as array解决方法
2014/08/16 PHP
php使用文本统计访问量的方法
2016/05/12 PHP
刷新页面实现方式总结(HTML,ASP,JS)
2008/11/13 Javascript
多选列表框动态添加,移动,删除,全选等操作的简单实例
2014/01/13 Javascript
js判断数据类型如判断是否为数组是否为字符串等等
2014/01/15 Javascript
多引号嵌套的变量命名的问题
2014/05/09 Javascript
js验证框架实现代码分享
2016/05/18 Javascript
AngularJS框架的ng-app指令与自动加载实现方法分析
2017/01/04 Javascript
node.js入门学习之url模块
2017/02/25 Javascript
把JavaScript代码改成ES6语法不完全指南(分享)
2017/09/10 Javascript
vue非父子组件通信问题及解决方法
2018/06/11 Javascript
浅谈VUE-CLI脚手架热更新太慢的原因和解决方法
2018/09/28 Javascript
Vue-Cli 3.0 中配置高德地图的两种方式
2019/06/19 Javascript
js实现拖拽与碰撞检测
2020/09/18 Javascript
[59:30]VG vs LGD 2019国际邀请赛淘汰赛 胜者组 BO3 第二场 8.22
2019/09/05 DOTA
[02:22]完美世界DOTA2联赛PWL S3 集锦第一期
2020/12/15 DOTA
Python全局变量操作详解
2015/04/14 Python
利用Python-iGraph如何绘制贴吧/微博的好友关系图详解
2017/11/02 Python
Python pygorithm模块用法示例【常见算法测试】
2018/08/16 Python
三步解决python PermissionError: [WinError 5]拒绝访问的情况
2020/04/22 Python
整理的15个非常有用的 HTML5 开发教程和速查手册
2011/10/18 HTML / CSS
HTML5之HTML元素扩展(上)—新增加的元素及使用概述
2013/01/31 HTML / CSS
理工科学生的自我评价
2013/12/15 职场文书
自我鉴定 电子商务专业
2014/01/30 职场文书
期末自我鉴定
2014/02/02 职场文书
乔迁之喜主持词
2014/03/27 职场文书
班级出游活动计划书
2014/08/15 职场文书
市级绿色学校申报材料
2014/08/25 职场文书
大学生交通专业求职信
2014/09/01 职场文书
支部书记四风问题对照检查材料
2014/10/04 职场文书
2015年底工作总结范文
2015/05/15 职场文书
海上钢琴师观后感
2015/06/03 职场文书
迎新生欢迎词2015
2015/07/16 职场文书
学校财务管理制度
2015/08/04 职场文书
MySQL数据库如何给表设置约束详解
2022/03/13 MySQL