Получить вычисленный цвет фона как rgb в IE
Я пытаюсь получить цвет фона RGB в IE, используя следующий код:
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'
это не возвращает значение цвета rgb, как это делает Firefox, оно возвращает 'buttonface', что для меня бесполезно.
1 ответ
Я работал над кросс-браузерной реализацией функции "getStyle", моя функция еще не завершена, но я могу помочь вам решить эту конкретную проблему, с которой вы столкнулись в IE.
Для вычисленных backgroundColor
Я использую хак, предложенный на этой странице, он использует IE queryCommandValue
способ получить BackColor
выбора.
О реализации вы публикуете, я бы рекомендовал сначала проверить, если стандарт getComputedStyle
метод через document.defaultView
существует, потому что некоторые браузеры, такие как Opera, предоставляют специфичные для IE currentStyle
объект для совместимости.
Итак, я изменил вашу функцию и включил взлом IE:
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;
}
}
Надеюсь, скоро я опубликую более общую реализацию, но этого будет достаточно, чтобы решить ваши backgorundColor
вопрос.
Вы можете проверить вышеупомянутую функцию здесь.