Javascript 按颜色选择CSS选择器,不考虑表示形式

Javascript 按颜色选择CSS选择器,不考虑表示形式,javascript,jquery,html,css,Javascript,Jquery,Html,Css,我想用某种颜色选择页面上的所有元素,比如说红色。 我知道我可以这样做:$div[style=color:rgb255,0,0]。但是,我的问题是红色有不同的表示形式,例如FF0000和单纯的红色。但rgb255、0、0中的任意数量的空格仍定义红色 我需要做一个一般的方式,这将工作的任何颜色,并将接受该颜色的任何代表。有没有办法定义这样一个智能CSS选择器?我不确定我是否理解这个问题。您只想在颜色为“红色”时进行过滤,确切地说,FF00000?或者你的过滤器中也会包含“darkred”之类的内容

我想用某种颜色选择页面上的所有元素,比如说红色。 我知道我可以这样做:$div[style=color:rgb255,0,0]。但是,我的问题是红色有不同的表示形式,例如FF0000和单纯的红色。但rgb255、0、0中的任意数量的空格仍定义红色


我需要做一个一般的方式,这将工作的任何颜色,并将接受该颜色的任何代表。有没有办法定义这样一个智能CSS选择器?

我不确定我是否理解这个问题。您只想在颜色为“红色”时进行过滤,确切地说,FF00000?或者你的过滤器中也会包含“darkred”之类的内容

在第一种情况下,我看不出有什么问题,kukkuz的解决方案可以进行一些改进


据我所知,使用CSS选择器无法做到这一点。使用这种选择器,您告诉jquery搜索包含您要查找的单词的字符串/子字符串。 但选择是无止境的

因为你正在搜索一个字符串,你必须考虑所有的可能性,包括空白,不同的字符大小,更多的样式属性,然后是包含0或255或FF或00等等的颜色。p> 这在当前支持选择器的情况下是不可能的

但是,如果您使用jquery获取所有元素,然后检查它们的颜色/背景色,您将获得真实的颜色表示

无论样式是如何编写的,浏览器都会返回一种颜色。根据浏览器的不同,颜色可以是十六进制或rgb

我认为这个behivor源于w3c规则

非elegent soulation将如下所示:

$('div').each(function(){
if($(this).css('color') == "rgb(255, 0, 0)" || $(this).css('color') == "#FF0000"){
    $(this).css("color","green");
}
if($(this).css('background-color') == "rgb(255, 0, 0)" || $(this).css('background-color') == "rgba(255, 0, 0, 0)"){
    $(this).css("background-color","green");
}});
小提琴:


这一个可以在chrome、firefox、edge、ie 11/10/9上使用。

getComputedStyle返回解析的rgba颜色扫描我在CSS选择器中使用了它吗?它是更大的选择过滤器的一部分…您不能在标准CSS选择器中使用它,但由于您使用的是jQuery,您可以编写一个使用getComputedStyle的自定义选择器。请尝试将CSS选择器定义为正则表达式字符串。我不擅长正则表达式,但它可以从regex=style=color这样的东西开始:但是冒号后面的内容取决于您想要选择的内容。如果您想选择所有可能的格式,我仍然会说可能的格式数量有限,因此创建一个简短的列表不会太难。getComputedStyle不适合选择器,但是,除了dina的想法之外,您还可以将解析后的值设为.style。再次强调,均匀化所有颜色以便CSS查询可以工作。我不关心颜色的色调。我可以假设它是准确的。我需要的是对表示不可知——要有一个选择器,它在语义级别工作,而不仅仅是比较字符串。“颜色”也是一个例子。它也可以是背景色或颜色的任何其他属性。“我需要的是对表示不可知——要有一个在语义层面工作的选择器”——哈哈,你真有趣。颜色就是表现。如果您想要语义,那么您首先不会尝试选择“按颜色”,而是相反:元素只有在语义分类的情况下才会有特定的颜色,而不是因为它是通过样式属性随机分配的。然后根据语义选择正确的元素也不会有问题。@CBroe表示并不意味着表示两次,甚至一次,它意味着通过某种字符或术语表达概念的方式。语义是术语或字符的含义,是每个表示背后的概念。所以迪娜的这句话其实很有道理。检测红色而不考虑表示红色的各种方式是在语义层面上进行的。@Marc这不是我的观点。如果您有一个强调语义的代码库,那么颜色不会通过在元素上放置样式属性来任意应用,而是通过样式表中的CSS选择器来应用。然后这些选择器可以用来选择相关的元素,而不是试图匹配实际的颜色值。@CBroe是的,但这是你的观点,不是这里的问题。如果您无法控制页面的构建方式,该怎么办?问题是如何在“颜色”属性中选择红色的所有对象及其任何表示形式。其他任何事情都不能回答这个问题。嘲笑OP最终没有回答问题只是欺负。