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 相关文章推荐
js中的布尔运算符使用介绍
Nov 20 Javascript
jQuery setTimeout传递字符串参数报错的解决方法
Jun 09 Javascript
JavaScript如何实现在文本框(密码框)输入提示语
Dec 25 Javascript
温习Javascript基础语法之词法结构
May 31 Javascript
jQuery中的100个技巧汇总
Dec 15 Javascript
vue组件实例解析
Jan 10 Javascript
tween.js缓动补间动画算法示例
Feb 13 Javascript
layui结合form,table的全选、反选v1.0示例讲解
Aug 15 Javascript
浅谈Angular 观察者模式理解
Nov 01 Javascript
微信小程序自定义弹窗实现详解(可通用)
Jul 04 Javascript
Layui实现数据表格中鼠标悬浮图片放大效果,离开时恢复原图的方法
Sep 11 Javascript
Javascript 模拟mvc实现点餐程序案例详解
Dec 24 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学习笔记之 函数声明(二)
2011/06/09 PHP
Yii快速入门经典教程
2015/12/28 PHP
[原创]php常用字符串输出方法分析(echo,print,printf及sprintf)
2016/07/09 PHP
对于Laravel 5.5核心架构的深入理解
2018/02/22 PHP
基于PHP实现解密或加密Cloudflar邮箱保护
2020/06/24 PHP
JavaScript 放大镜 放大倍率和视窗尺寸
2011/05/09 Javascript
用jQuery模拟页面加载进度条的实现代码
2011/12/19 Javascript
jquery批量设置属性readonly和disabled的方法
2014/01/24 Javascript
javascript制作坦克大战全纪录(1)
2014/11/27 Javascript
JavaScript语言对Unicode字符集的支持详解
2014/12/30 Javascript
js实现同一页面多个运动效果的方法
2015/04/10 Javascript
JavaScript动态提示输入框输入字数的方法
2015/07/27 Javascript
jquery动态创建div与input的实例代码
2016/10/12 Javascript
angularjs实现首页轮播图效果
2017/04/14 Javascript
Node.js动手撸一个静态资源服务器的方法
2019/03/09 Javascript
原生JS实现留言板
2020/03/26 Javascript
JavaScript进阶(四)原型与原型链用法实例分析
2020/05/09 Javascript
原生js实现日期选择插件
2020/05/21 Javascript
javascript实现前端成语点击验证优化
2020/06/24 Javascript
使用PYTHON接收多播数据的代码
2012/03/01 Python
python中使用urllib2获取http请求状态码的代码例子
2014/07/07 Python
用python实现面向对像的ASP程序实例
2014/11/10 Python
Python3.6笔记之将程序运行结果输出到文件的方法
2018/04/22 Python
Pycharm中Python环境配置常见问题解析
2020/01/16 Python
土耳其风格手工珠宝:Ottoman Hands
2019/07/26 全球购物
Lentiamo荷兰:在线订购隐形眼镜、隐形眼镜液和太阳镜
2019/10/25 全球购物
介绍一下except的用法和作用
2015/01/22 面试题
采购部主管岗位职责
2014/01/01 职场文书
地球一小时倡议书
2014/04/15 职场文书
政治学专业毕业生求职信
2014/08/11 职场文书
煤矿安全协议书
2014/08/20 职场文书
运动会广播稿100字
2014/09/14 职场文书
2014年“向国旗敬礼”网上签名寄语活动方案
2014/09/27 职场文书
大学学生个人总结
2015/02/15 职场文书
投标售后服务承诺书
2015/04/29 职场文书
阿里云服务器搭建Php+Apache运行环境的详细过程
2021/05/15 PHP