zoukankan      html  css  js  c++  java
  • cssText

    这个setStyle方法确实避免了mydiv.style.xxx这种写法大量重复的代码,确实代码简洁了不少,也很直观,但是这里还有一个问题,如果设置的样式一多,重复操作DOM无法避免,销毁原样式并重建都会增加浏览器的开销。我们可以先生成一个样式字符串,再一次性设置样式,这样可以尽量避免页面reflow。例如:

    [cc lang=”javascript” width=”630″ tab_size=”4″  ]

    //类型判断
    var TypeC=window.TypeC||{};
    (function(TC){
    var toString = Object.prototype.toString;
    TC.isString = function(o) {
    return toString.call(o) === ‘[object String]';
    };
    TC.isObject = function(o) {
    return toString.call(o) === ‘[object Object]';
    };
    })(TypeC);

    function setStyle(el, style) {//style变量:{“display”:”block”,”font-size”:”28px”,”color”:”red”}
    var sty=””;
    if (TypeC.isString(style)){
    sty=style;
    }else if (TypeC.isObject(style)) {
    var s;
    for (s in style) {
    sty += s+”:”+style[s]+”;”;
    }
    }
    el.style.cssText +=”;”+sty;
    }

    [/cc]

    如果参数style传进来的是字符串,那么直接用cssText设置样式,如果是个对象,先将对象拼装成字符串,再用cssText设置样式;

    这里使用了obj.style.cssText=“”;这种写法,

    很蛋疼的是这里使用了这样一句:el.style.cssText +=”;”+sty;

    原因是:obj.style.cssText=“”;这种写法会把原有的cssText清掉,比如原来的style中有’display:none;’,那么执行完上面的JS后,display就被删掉了。
    为了解决这个问题,可以采用cssText累加的方法:

    Element.style.cssText += ’100px;height:100px;top:100px;left:100px;’

    但是,cssText(假如不为空)在IE中最后一个分号会被删掉,比较BT….
    因此,上面cssText累加的方法在IE中是无效的。

    最后,可以在前面添加一个分号来解决这个问题:

    Element.style.cssText += ’;100px;height:100px;top:100px;left:100px;’

    具体可以查看:用cssText批量修改样式[更新]

     

    用cssText批量修改样式[更新]

    一般情况下我们用js设置元素对象的样式会使用这样的形式:

    var element= document.getElementById(“id”);
    element.style.width=”20px”;
    element.style.height=”20px”;
    element.style.border=”solid 1px red”;

    样式一多,代码就很多;而且通过JS来覆写对象的样式是比较典型的一种销毁原样式并重建的过程,这种销毁和重建,都会增加浏览器的开销。

    js中有一个cssText的方法:

    语法为:obj.style.cssText(“样式”);

    obj.style.cssText=”样式”;

    上面的代码我们可以修改成:感谢sliuqin的在留言中的斧正

    element.style.cssText(“20px;height:20px;border:solid 1px red;”)

    element.style.cssText=”20px;height:20px;border:solid 1px red;”;

    这样就可以尽量避免页面reflow,提高页面性能。

    ——以下内容2009年10月10日更新,来自http://blog.xhlv.com/2009/09/csstext-ie-bug/-——————-

    但是,这样会有一个问题,会把原有的cssText清掉,比如原来的style中有’display:none;’,那么执行完上面的JS后,display就被删掉了。
    为了解决这个问题,可以采用cssText累加的方法:

    Element.style.cssText += ‘100px;height:100px;top:100px;left:100px;’

    但是,cssText(假如不为空)在IE中最后一个分号会被删掉,比较BT….
    因此,上面cssText累加的方法在IE中是无效的。

    最后,可以在前面添加一个分号来解决这个问题:

    Element.style.cssText += ‘;100px;height:100px;top:100px;left:100px;’

    Posted in JS Tagged  5 Comments

    Posted in JS Tagged  Leave a comment

  • 相关阅读:
    Ansible学习 Playbooks_1
    Ansible学习 ad-hoc命令
    Ansible学习 Patterns
    【转】对于SQL SERVER 事务日志已满问题整理
    【转】Apache配置正向代理与反向代理
    【转】Python的IDE和破解Code——pycharm
    【转】SQLServer 数据库变成单个用户后无法访问问题的解决方法
    【转】 尝试在数据库5 中提取逻辑页() 失败。该逻辑页属于分配单元xxx而非xxx
    【Oracle】Oracle版本导入导出问题
    【Java】eclipse导入war包二次开发
  • 原文地址:https://www.cnblogs.com/love-Z/p/4481290.html
Copyright © 2011-2022 走看看