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删除节点的三个方法即remove()detach()和empty()
Dec 27 Javascript
JavaScript基础篇(6)之函数表达式闭包
Dec 11 Javascript
Vue.js计算属性computed与watch(5)
Dec 09 Javascript
Angular中实现树形结构视图实例代码
May 05 Javascript
jQuery操作DOM_动力节点Java学院整理
Jul 04 jQuery
Vue调试神器vue-devtools安装方法
Dec 12 Javascript
浅谈vue项目可以从哪些方面进行优化
May 05 Javascript
Vue常用的几个指令附完整案例
Nov 06 Javascript
bootstrap与pagehelper实现分页效果
Dec 29 Javascript
JavaScript实现图片的放大缩小及拖拽功能示例
May 14 Javascript
jquery多级树形下拉菜单的实例代码
Jul 09 jQuery
JS实现可控制的进度条
Mar 25 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
对squid中refresh_pattern的一些理解和建议
2009/04/17 PHP
php print EOF实现方法
2009/05/21 PHP
php function用法如何递归及return和echo区别
2014/03/07 PHP
php利用curl抓取新浪微博内容示例
2014/04/27 PHP
PHP异常Parse error: syntax error, unexpected T_VAR错误解决方法
2014/05/06 PHP
Linux+Nginx+MySQL下配置论坛程序Discuz的基本教程
2015/12/23 PHP
php7 图形用户界面GUI 开发示例
2020/02/22 PHP
jquery中对于批量deferred的处理方法
2014/01/22 Javascript
使用jquery中height()方法获取各种高度大全
2014/04/02 Javascript
Javascript中封装window.open解决不兼容问题
2014/09/28 Javascript
js实现滑动触屏事件监听的方法
2015/05/05 Javascript
深入浅出 jQuery中的事件机制
2016/08/23 Javascript
jQuery插件zTree实现单独选中根节点中第一个节点示例
2017/03/08 Javascript
JavaScript限制在客户区可见范围的拖拽(解决scrollLeft和scrollTop的问题)(2)
2017/05/17 Javascript
微信小程序实现下拉刷新和轮播图效果
2017/11/21 Javascript
element-ui中select组件绑定值改变,触发change事件方法
2018/08/24 Javascript
node.js环境搭建图文详解
2018/09/19 Javascript
Jquery cookie插件实现原理代码解析
2020/08/04 jQuery
在Vue中使用HOC模式的实现
2020/08/23 Javascript
jQuery实现日历效果
2020/09/11 jQuery
Python3学习笔记之列表方法示例详解
2017/10/06 Python
pip安装py_zipkin时提示的SSL问题对应
2018/12/29 Python
Python实现的银行系统模拟程序完整案例
2019/04/12 Python
python+selenium 鼠标事件操作方法
2019/08/24 Python
Python多线程及其基本使用方法实例分析
2019/10/29 Python
selenium+python配置chrome浏览器的选项的实现
2020/03/18 Python
详解Python openpyxl库的基本应用
2021/02/26 Python
HTML5 创建canvas元素示例代码
2014/06/04 HTML / CSS
利用HTML5 Canvas制作一个简单的打飞机游戏
2015/05/11 HTML / CSS
在HTML5中使用MathML数学公式的简单讲解
2016/02/19 HTML / CSS
管理学专业个人求职信范文
2013/12/13 职场文书
春季防火方案
2014/05/10 职场文书
志愿者工作心得体会
2016/01/15 职场文书
MySQL 服务和数据库管理
2021/11/11 MySQL
恶魔之树最顶端的三颗果实 震震果实上榜,第一可以制造岩浆
2022/03/18 日漫
Qt数据库应用之实现图片转pdf
2022/06/01 Java/Android