我正在尝试创建一个jQuery钩子,它将读取并设置所有颜色为十六进制值而不是RGB。我找到了一个能够正确读取HEX颜色的钩子,但我不知道如何修改它以将CSS颜色写为HEX。
例如,我想要$(" h1")。css(' color','#333333');内联样式h1" style ='颜色:#333333;'"而不是当前的RGB等价物。我用来将读取颜色作为十六进制返回的钩子是:
$.cssHooks.color = {
get: function(elem) {
if (elem.currentStyle)
var bg = elem.currentStyle["color"];
else if (window.getComputedStyle)
var bg = document.defaultView.getComputedStyle(elem,
null).getPropertyValue("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]);
}
}}
更新
我能够以超级迂回的方式完成它,将所有元素样式转换为HEX并重建样式并通过$(elm).attr(样式,样式)设置它;似乎非常hacky和复杂,但它的工作原理。
答案 0 :(得分:2)
这个方法似乎适用于我,但它假设格式良好的字符串。您可以将检查添加到此功能:
function rgb_to_hex(rgb_color) {
if (!rgb_color) return ''
return rgb_color
.replace(/.*rgba?\(([^(]+)\).*/gi, '$1')
.split(',')
.splice(0,3)
.reduce(function(acc, cur) { return acc+format_hex(cur) }, '');
}
function format_hex(ns) {
var v;
return isNaN(v = parseInt(ns)) ? '' : ('00' + v.toString(16)).substr(-2);
}
var v,
color1 = (v = rgb_to_hex('rgb(0,0,0)')) !== '' ? '#' + v : '',
color2 = (v = rgb_to_hex('rgb(0,255,0)')) !== '' ? '#' + v : '',
color3 = (v = rgb_to_hex('rgba(123,39,12, .1)')) !== '' ? '#' + v : '',
color4 = (v = rgb_to_hex()) !== '' ? '#' + v : '';
color5 = (v = rgb_to_hex('gobbledegook')) !== '' ? '#' + v : '';
console.log(color1); // '#000000'
console.log(color2); // '#00ff00'
console.log(color3); // '#7b270c'
console.log(color4); // ''
console.log(color5); // ''
此外,这部分:
if (elem.currentStyle)
var bg = elem.currentStyle["color"];
else if (window.getComputedStyle)
var bg = document.defaultView.getComputedStyle(elem, null)
.getPropertyValue("color");
应该是这样的:
var bg = '';
if (elem.currentStyle) {
bg = elem.currentStyle["color"];
} else if (window.getComputedStyle) {
bg = document.defaultView.getComputedStyle(elem, null)
.getPropertyValue("color");
}
因为bg
可能没有定义。
答案 1 :(得分:1)
你遇到的问题是jQuery没有写出你想要的东西,但它能理解什么。你可以强迫"强迫"代码做你想做的事情:
$('h1').css('color', '');
$('h1').attr('style', $('h1').attr('style') + 'color: #FFEE02');
您必须使用第一行才能使您的HTML代码增长太多,而在第二行中,您需要在html上设置颜色。