如何解决我可以强制jQuery.css“ backgroundColor”以十六进制格式返回吗?
| 我有一个像这样的元素:<p>My text with a <strong class=\"highlighted\">sample highlight</strong>.<p>
像这样的CSS类:
.highlighted {
background: #f0ff05;
font-weight: normal;
}
但是当我使用这样的jQuery时:
$(\".highlighted\").css(\"backgroundColor\");
返回returns3ѭ。我可以编写一些将rgb转换为十六进制的函数,但是我想知道是否有某种方法使jQuery返回十六进制格式的值。
解决方法
颜色总是以rgb的形式返回(IE6除外,IE6已经以十六进制形式返回),因此我们不能以其他格式自然返回。
如您所说,您可以编写一个将十六进制转换为rgb的函数。以下是有关如何编写此函数的几个示例的主题:如何获取十六进制颜色值而不是RGB值?
但是,您是否想知道是否有一种方法可以直接以十六进制形式直接返回jQuery:答案是肯定的,自jQuery 1.4.3起使用CSS Hooks便可以实现。
代码应为:
$.cssHooks.backgroundColor = {
get: function(elem) {
if (elem.currentStyle)
var bg = elem.currentStyle[\"backgroundColor\"];
else if (window.getComputedStyle)
var bg = document.defaultView.getComputedStyle(elem,null).getPropertyValue(\"background-color\");
if (bg.search(\"rgb\") == -1)
return bg;
else {
bg = bg.match(/^rgb\\((\\d+),\\s*(\\d+),\\s*(\\d+)\\)$/);
function hex(x) {
return (\"0\" + parseInt(x).toString(16)).slice(-2);
}
return \"#\" + hex(bg[1]) + hex(bg[2]) + hex(bg[3]);
}
}
}
当您致电$(\".highlighted\").css(\"backgroundColor\")
时,返回的便是#f0ff05
。这是一个工作示例,您可以看到它正在工作。
, 这是Erick Petrucelli的答案的稍作调整的版本。它似乎可以处理RGBA。
$.cssHooks.backgroundColor = {
get: function (elem) {
if (elem.currentStyle)
var bg = elem.currentStyle[\"backgroundColor\"];
else if (window.getComputedStyle)
var bg = document.defaultView.getComputedStyle(elem,null).getPropertyValue(\"background-color\");
if (bg.search(\'rgba\') > -1) {
return \'#00ffffff\';
} else {
if (bg.search(\'rgb\') == -1) {
return bg;
} else {
bg = bg.match(/^rgb\\((\\d+),\\s*(\\d+)\\)$/);
function hex(x) {
return (\"0\" + parseInt(x).toString(16)).slice(-2);
}
return \"#\" + hex(bg[1]) + hex(bg[2]) + hex(bg[3]);
}
}
}
};
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。