javascript - crossbrowser - 获取 css 颜色

标签 javascript jquery html css

<分区>

我正在尝试获取元素的背景颜色:

var bgcolor = $('.myclass').first().css('background-color')

并尝试将其转换为十六进制

function rgbhex(color) {
    return "#" + $.map(color.match(/\b(\d+)\b/g), function (digit) {
               return ('0' + parseInt(digit).toString(16)).slice(-2);
    }).join('');
}

但问题是,我进入 FireFox "transparent" for bgcolor,其中 rgbhex() 失败并出现错误:

TypeError: elems is null

但在 chrome 中,我得到 rgba(0, 0, 0, 0) 并且 rgbhex() 正在为此工作。

如何获取跨浏览器格式的 css 颜色并将其转换为十六进制?

最佳答案

您确定要处理颜色设置为无 rgba 值的情况吗?

浏览器永远不会完美一致地处理这类事情,所以我认为问题在于您每次都假设一个 rbga 值,从而使代码变得脆弱。即使你使用 getComputedStyle() ,这在优秀的浏览器中将比 css()(直接获取值)更一致,您仍然需要处理边缘情况。

我会这样做:

if ('transparent' === bgcolor) {
  hex = '#000';
} else {
  // work magic here
}

但是,您将在浏览器整体不一致的其他上下文中遇到其他示例,因此默认为黑色或白色的 case 语句可能是更好的解决方案。

关于javascript - crossbrowser - 获取 css 颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31623692/

相关文章:

asp.net - 使用 jQuery 将跨域 JSON 发布到 ASP.NET

html - html href元素中title和name的区别

javascript - 如何在 html 表格中动态添加行

javascript - 迭代数组事件和监听器 javascript

javascript - 在express.js服务器中使用条件

javascript - 如何检查列表是否可排序?

html - CSS 网格布局最后一项中心

javascript - 使用外部 javascript lib footable 时丢失 Angular 2 中的点击事件

javascript - pts.js 'NS_ERROR_NOT_AVAILABLE: ' 尝试将图像用于粒子时出错

jquery - 由 jQuery 设置的填充会更改元素的宽度