Javascript 在IE中以rgb格式获取计算的背景色

Javascript 在IE中以rgb格式获取计算的背景色,javascript,jquery,computed-style,Javascript,Jquery,Computed Style,我正在尝试使用以下代码获取IE中的RGB背景色: function getStyle(elem, name) { // J/S Pro Techniques p136 if (elem.style[name]) { return elem.style[name]; } else if (elem.currentStyle) { return elem.currentStyle[name]; } else if (docume

我正在尝试使用以下代码获取IE中的RGB背景色:

function getStyle(elem, name) {
    // J/S Pro Techniques p136
    if (elem.style[name]) {
        return elem.style[name];
    } else if (elem.currentStyle) {
        return elem.currentStyle[name];
    }
    else if (document.defaultView && document.defaultView.getComputedStyle) {
        name = name.replace(/([A-Z])/g, "-$1");
        name = name.toLowerCase();
        s = document.defaultView.getComputedStyle(elem, "");
        return s && s.getPropertyValue(name);
    } else {
        return null;
    }
}

var $b = $("<button>");
$b.css("backgroundColor", "ButtonFace");
$("body").append($b);
alert("button bg color is: "+ getStyle($b[0],"backgroundColor"));
//alerts 'buttonface'
函数getStyle(元素、名称){ //J/S Pro技术p136 if(元素样式[名称]){ 返回元素样式[名称]; }else if(元素当前样式){ 返回元素currentStyle[名称]; } else if(document.defaultView&&document.defaultView.getComputedStyle){ name=name.replace(/([A-Z])/g,“-$1”); name=name.toLowerCase(); s=document.defaultView.getComputedStyle(elem,“”); 返回s&&s.getPropertyValue(名称); }否则{ 返回null; } } 变量$b=$(“”); $b.css(“背景色”、“按钮面”); $(“正文”)。追加($b); 警告(“按钮背景颜色为:“+getStyle($b[0],“backgroundColor”)); //警报“按钮面”
它不像firefox那样返回rgb颜色值,它返回的“buttonface”对我来说毫无用处。

我一直在研究“getStyle”函数的跨浏览器实现, 我的功能尚未完成,但我可以帮助您解决IE的这个特定问题

对于计算的
backgroundColor
,我使用了第页中提出的一个hack,它使用特定于IE的方法来获得选择的结果

关于您发布的实现,我建议首先检查通过
文档.defaultView
的标准
getComputedStyle
方法是否存在,因为某些浏览器(如Opera)提供了特定于IE的
currentStyle
对象以实现兼容性

因此,我重构了您的函数并加入了IE hack:

希望很快我会发布一个更通用的实现,但这将足以解决您的
backgorundColor
问题


您可以测试上述功能。

@CMS这令人印象深刻。您可以链接到任何关于getStyle的返回值和颜色的文档吗?我最感兴趣的是跨浏览器问题。或者你把你完成的代码贴在什么地方了?顺便说一句:链接到黑客给出了一个错误。
function getStyle(elem, name) {
  if (document.defaultView && document.defaultView.getComputedStyle) {
    name = name.replace(/([A-Z])/g, "-$1");
    name = name.toLowerCase();
    s = document.defaultView.getComputedStyle(elem, "");
    return s && s.getPropertyValue(name);
  } else if (elem.currentStyle) {
    if (/backgroundcolor/i.test(name)) {
      return (function (el) { // get a rgb based color on IE
        var oRG=document.body.createTextRange();
        oRG.moveToElementText(el);
        var iClr=oRG.queryCommandValue("BackColor");
          return "rgb("+(iClr & 0xFF)+","+((iClr & 0xFF00)>>8)+","+
                      ((iClr & 0xFF0000)>>16)+")";
      })(elem);
    }

    return elem.currentStyle[name];
  } else if (elem.style[name]) {
    return elem.style[name];
  } else  {
    return null;
  }
}