javascript - 如何从javascript中的rgb字符串中提取颜色值

标签 javascript jquery css regex jquery-ui

<分区>

Javascript 代码

$(".designer-element").each(function () {
        var $this = $(this),
        var  moot = $this.css(["color", "border-color", "background-color"]);
} );

用于获取元素颜色。这会将颜色作为字符串返回,例如

"background-color": "rgba(0, 0, 0, 0)"
"border-color": "rgb(211, 211, 211)"
"color": "rgb(51, 51, 51)"

如何从这些字符串中提取单独的 r 、 g 和 b 值。不需要值。 还是有更好的方法直接返回这些颜色值?

substrg 不能使用,因为值有可变大小 1-3 位 可以使用一些正则表达式吗?

使用了 html5、jquery、jquery-ui 和 bootstrap。

最佳答案

这是我用的

// return array of [r,g,b,a] from any valid color. if failed returns undefined
function colorValues(color)
{
    if (color === '')
        return;
    if (color.toLowerCase() === 'transparent')
        return [0, 0, 0, 0];
    if (color[0] === '#')
    {
        if (color.length < 7)
        {
            // convert #RGB and #RGBA to #RRGGBB and #RRGGBBAA
            color = '#' + color[1] + color[1] + color[2] + color[2] + color[3] + color[3] + (color.length > 4 ? color[4] + color[4] : '');
        }
        return [parseInt(color.substr(1, 2), 16),
            parseInt(color.substr(3, 2), 16),
            parseInt(color.substr(5, 2), 16),
            color.length > 7 ? parseInt(color.substr(7, 2), 16)/255 : 1];
    }
    if (color.indexOf('rgb') === -1)
    {
        // convert named colors
        var temp_elem = document.body.appendChild(document.createElement('fictum')); // intentionally use unknown tag to lower chances of css rule override with !important
        var flag = 'rgb(1, 2, 3)'; // this flag tested on chrome 59, ff 53, ie9, ie10, ie11, edge 14
        temp_elem.style.color = flag;
        if (temp_elem.style.color !== flag)
            return; // color set failed - some monstrous css rule is probably taking over the color of our object
        temp_elem.style.color = color;
        if (temp_elem.style.color === flag || temp_elem.style.color === '')
            return; // color parse failed
        color = getComputedStyle(temp_elem).color;
        document.body.removeChild(temp_elem);
    }
    if (color.indexOf('rgb') === 0)
    {
        if (color.indexOf('rgba') === -1)
            color += ',1'; // convert 'rgb(R,G,B)' to 'rgb(R,G,B)A' which looks awful but will pass the regxep below
        return color.match(/[\.\d]+/g).map(function (a)
        {
            return +a
        });
    }
}

https://gist.github.com/oriadam/396a4beaaad465ca921618f2f2444d49

例子

colorValues('transparent'); // [0,0,0,0]
colorValues('white'); // [255, 255, 255, 1]
colorValues('teal'); // [0, 128, 128, 1]
colorValues('rgba(11,22,33,.44)'); // [11, 22, 33, 0.44]
colorValues('rgb(11,22,33)'); // [11, 22, 33, 1]
colorValues('#abc'); // [170, 187, 204, 1]
colorValues('#abc6'); // [170, 187, 204, 0.4]
colorValues('#aabbcc'); // [170, 187, 204, 1]
colorValues('#aabbcc66'); // [170, 187, 204, 0.4]
colorValues('asdf'); // undefined
colorValues(''); // undefined
colorValues(NaN); // Script Error
colorValues(123); // Script Error

关于javascript - 如何从javascript中的rgb字符串中提取颜色值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34980574/

相关文章:

javascript - 为什么jQuery或诸如getElementById之类的DOM方法找不到元素?

javascript - 给定 X 文件数组绘制 X 图表 + 使用数组 + d3 中的元素添加图表标题

css - 如何将我的背景图像定位在我的 div 的中心,但给它一个偏移量?

javascript - html2pdf js不提示下载

html - 垂直滚动条在绝对定位元素中消失

javascript - 使用 Javascript 在 case 语句中打开正则表达式比较的结果

javascript - 如何确定调用函数 x 次所需的时间

Javascript 表单验证代码循环

javascript - 我应该将 AJAX 调用的响应处理程序代码放在 Angular.js 中的哪里?

javascript - 加载繁重的 js 小部件导致浏览器停止响应