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 相关文章推荐
深入理解JavaScript系列(9) 根本没有“JSON对象”这回事!
Jan 15 Javascript
jquery 插件学习(三)
Aug 06 Javascript
JS实现简单的图书馆享元模式实例
Jun 30 Javascript
JavaScript每天必学之数组和对象部分
Sep 17 Javascript
jQuery模拟窗口抖动效果
Mar 15 Javascript
mui开发中获取单选按钮、复选框的值(实例讲解)
Jul 24 Javascript
微信小程序视图template模板引用的实例详解
Sep 20 Javascript
Dropify.js图片宽高自适应的方法
Nov 27 Javascript
深入理解ES6之数据解构的用法
Jan 13 Javascript
JavaScript类的继承多种实现方法
May 30 Javascript
解决qrcode.js生成二维码时必须定义一个空div的问题
Jul 09 Javascript
面试中canvas绘制图片模糊图片问题处理
Mar 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
PHP strtotime函数详解
2009/12/18 PHP
新手菜鸟必读:session与cookie的区别
2013/08/22 PHP
php判断当前用户已在别处登录的方法
2015/01/06 PHP
PHP性能分析工具XHProf安装使用教程
2015/05/13 PHP
php 下 html5 XHR2 + FormData + File API 上传文件操作实例分析
2020/02/28 PHP
jQuery.clean使用方法及思路分析
2013/01/07 Javascript
jquery 实现窗口的最大化不论什么情况
2013/09/03 Javascript
JavaScript获取路径设计源码
2014/05/22 Javascript
JavaScript实现自动弹出窗口并自动关闭窗口的方法
2015/08/06 Javascript
jquery实现清新实用的网页菜单效果
2015/08/28 Javascript
纯JS前端实现分页代码
2016/06/21 Javascript
Vue.JS入门教程之列表渲染
2016/12/01 Javascript
js 实现省市区三级联动菜单效果
2017/02/20 Javascript
vue中用动态组件实现选项卡切换效果
2017/03/25 Javascript
微信小程序实现移动端滑动分页效果(ajax)
2017/06/13 Javascript
JavaScript-定时器0~9抽奖系统详解(代码)
2017/08/16 Javascript
快速解决select2在bootstrap模态框中下拉框隐藏的问题
2018/08/10 Javascript
[06:45]DOTA2卡尔工作室 英雄介绍幻影长矛手篇
2013/07/12 DOTA
python翻译软件实现代码(使用google api完成)
2013/11/26 Python
python进阶教程之函数对象(函数也是对象)
2014/08/30 Python
python3简单实现微信爬虫
2015/04/09 Python
简单介绍Python中用于求最小值的min()方法
2015/05/15 Python
使用Python写个小监控
2016/01/27 Python
Python使用matplotlib绘图无法显示中文问题的解决方法
2018/03/14 Python
python 执行文件时额外参数获取的实例
2018/12/18 Python
python3使用flask编写注册post接口的方法
2018/12/28 Python
Win10+GPU版Pytorch1.1安装的安装步骤
2019/09/27 Python
Python基于pandas爬取网页表格数据
2020/05/11 Python
纯css3实现照片墙效果
2014/12/26 HTML / CSS
自我鉴定三原则
2014/01/13 职场文书
婚庆公司计划书
2014/09/15 职场文书
2014年财务工作总结与计划
2014/12/08 职场文书
通知函格式范文
2015/04/27 职场文书
工厂员工辞职信范文
2015/05/12 职场文书
八年级作文之一起的走过日子
2019/09/17 职场文书
Mysql事务索引知识汇总
2022/03/17 MySQL