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 04 Javascript
jQuery不间断滚动效果(模拟百度新闻支持文字/图片/垂直滚动)
Feb 05 Javascript
jQuery select表单提交省市区城市三级联动核心代码
Jun 09 Javascript
AngularJS初始化过程分析(引导程序)
Dec 06 Javascript
JavaScript数据类型学习笔记
Jan 25 Javascript
JS制作类似选项卡切换的年历
Dec 03 Javascript
React Native第三方平台分享的实例(Android,IOS双平台)
Aug 04 Javascript
微信小程序异步处理详解
Nov 10 Javascript
VueRouter导航守卫用法详解
Dec 25 Javascript
ES6 迭代器(Iterator)和 for.of循环使用方法学习(总结)
Feb 08 Javascript
记录一篇关于redux-saga的基本使用过程
Aug 18 Javascript
Vue使用v-viewer实现图片预览
Oct 21 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
Window下PHP三种运行方式图文详解
2013/06/11 PHP
迅速确定php多维数组的深度的方法
2014/01/07 PHP
php实现天干地支计算器示例
2014/03/14 PHP
Thinkphp5 微信公众号token验证不成功的原因及解决方法
2017/11/12 PHP
PHP给源代码加密的几种方法汇总(推荐)
2018/02/06 PHP
设定php简写功能的方法
2019/11/28 PHP
js 剪切板应用clipboardData详细解析
2013/12/17 Javascript
深入学习jQuery Validate表单验证
2016/01/18 Javascript
总结jQuery插件开发中的一些要点
2016/05/16 Javascript
js的form表单提交url传参数(包含+等特殊字符)的两种解决方法
2016/05/25 Javascript
Vue中的数据监听和数据交互案例解析
2017/07/12 Javascript
bootstrap modal+gridview实现弹出框效果
2017/08/15 Javascript
bootstrap table实现点击翻页功能 可记录上下页选中的行
2017/09/28 Javascript
浅谈webpack打包过程中因为图片的路径导致的问题
2018/02/21 Javascript
jQuery实现的简单手风琴效果示例
2018/08/29 jQuery
Vue extend的基本用法(实例详解)
2019/12/09 Javascript
vue将data恢复到初始状态 &amp;&amp; 重新渲染组件实例
2020/09/04 Javascript
Python3实现的腾讯微博自动发帖小工具
2013/11/11 Python
python 字典(dict)遍历的四种方法性能测试报告
2014/06/25 Python
Python中处理字符串之isalpha()方法的使用
2015/05/18 Python
解决出现Incorrect integer value: '' for column 'id' at row 1的问题
2017/10/29 Python
python实现批量按比例缩放图片效果
2018/03/30 Python
python3学生名片管理v2.0版
2018/11/29 Python
基于腾讯云服务器部署微信小程序后台服务(Python+Django)
2019/05/08 Python
python中shell执行知识点
2020/05/06 Python
python小程序之4名牌手洗牌发牌问题解析
2020/05/15 Python
python基于pygame实现飞机大作战小游戏
2020/11/19 Python
css3使用animation属性实现炫酷效果(推荐)
2020/02/04 HTML / CSS
求职自荐信
2013/12/14 职场文书
中式餐厅创业计划书范文
2014/01/23 职场文书
小学生元旦感言
2014/02/26 职场文书
人民调解员先进事迹材料
2014/05/08 职场文书
理发店策划方案
2014/06/05 职场文书
中秋节国旗下演讲稿
2014/09/13 职场文书
个人四风问题原因分析及整改措施
2014/09/28 职场文书
详解Python生成器和基于生成器的协程
2021/06/03 Python