• 呵呵,原来dustindiaz的toggle() 不兼容firefox

    日期:2006-07-30 | 分类:

    版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明
    http://www.blogbus.com/weibing-logs/2939335.html

        早上用了dustindiaz的toggle() ,发现el.style.display 的取值不正常....

    原来除了内联的css外,不能直接这样取值,IE下可以用currentStyle顶替,firefox下就要通过document.defaultView.getComputedStyle(xxxl).getPropertyValue(xxx) 来取值,十分不方便,上网傻找了一通,无果....

        很幸运的是,YUI的DOM里面就内置了一个getStyle函数,可以直接取当前css的值。部分代码如下:

    if (property == 'opacity' && el.filters) {// IE opacity
        value = 1;
        try {
           value = el.filters.item('DXImageTransform.Microsoft.Alpha').opacity / 100;
        } catch(e) {
           try {
              value = el.filters.item('alpha').opacity / 100;
           } catch(e) {}
        }
     } else if (el.style[camel]) { // camelCase for valid styles
        value = el.style[camel];
     }
     else if (isIE && el.currentStyle && el.currentStyle[camel]) { // camelCase for currentStyle; isIE to workaround broken Opera 9 currentStyle
        value = el.currentStyle[camel];
     }
     else if ( dv && dv.getComputedStyle ) { // hyphen-case for computedStyle
        var computed = dv.getComputedStyle(el, '');
       
        if (computed && computed.getPropertyValue(hyphen)) {
           value = computed.getPropertyValue(hyphen);
        }
    }

    现在修改一下toggle() ,

    function toggle(obj) {
     var el = YAHOO.util.Dom.getStyle(obj, "visibility");
     if ( el != 'hidden' ) {
      YAHOO.util.Dom.setStyle(obj, "visibility", "hidden");
     }
     else {
      YAHOO.util.Dom.setStyle= (obj, "visibility", "visible"); }
    }

    搞定!现在效率虽然是相对差了些,不过方便易用多了^-^

    如果不喜欢YUI,还有另外一个通用函数:

    function GetCurrentStyle (obj, prop) {
    if (obj.currentStyle) {
    return obj.currentStyle[prop];
    }
    else if (window.getComputedStyle) {
    prop = prop.replace (/([A-Z])/g, "-$1");
    prop = prop.toLowerCase ();
    return window.getComputedStyle (obj, "").getPropertyValue(prop);
    }
    return null;
    }

    分享到:

    评论

  • 收益非浅哈 谢谢
    回复TOMMY说:
    呵呵,第一个评论归你了,希望能带给大家更多的冬冬
    2006-07-30 20:31:29