I use this pseudo jQuery selector in my code, defined in utility file:
(function() {
function rgb2hex(rgb) {
return '#' + rgb.match(/^rgb\(([^\)]+)\)$/)[1].split(/\s*,\s*/)
.filter(Boolean).map(function(n) {
return ('00' + parseInt(n, 10).toString(16)).slice(-2);
}).join('');
}
$.extend($.expr[':'], {
// pesudo selector that allow to use :css(color: red)
css: function(element, index, meta) {
element = $(element);
var rules = meta[3].split(';').filter(Boolean);
return rules.filter(function(pair) {
pair = pair.split(/\s*:\s*/);
var css = element.css(pair[0]);
if (css.match(/rgb\(/)) {
css = rgb2hex(css);
}
return css === pair[1];
}).length === rules.length;
}
});
})();
$(function() {
$('li:css(color: #ff0000)').css('background', 'black');
});
.red { color: red; }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<ul>
<li class="red">1</li>
<li style="color: red">2</li>
<li style="color: blue">3</li>
<li>4</li>
</ul>
If you need to select element with li:css(color: red) to select red nodes, in Chrome the value red is converted to rgb(255, 0, 0), so you need to convert red to the same value, to do that you can create dummy element that is inserted to body (it can have visibility: hidden)
var tmp = $('<span/>').css('visibility', 'hidden').appendTo('body');
element can be inserted once, and use:
tmp.css(pair[0], pair[1]);
//or
tmp.css.apply(tmp, pair);
// and
return tmp.css(pair[0]) == element.css(pair[0]);
(function() {
var tmp = $('<span/>').css('visibility', 'hidden').appendTo('body');
$.extend($.expr[':'], {
// pesudo selector that allow to use :css(color: red)
css: function(element, index, meta) {
element = $(element);
var rules = meta[3].split(';').filter(Boolean);
return rules.filter(function(pair) {
pair = pair.split(/\s*:\s*/);
tmp.css.apply(tmp, pair);
return tmp.css(pair[0]) == element.css(pair[0]);
}).length === rules.length;
}
});
})();
$(function() {
$('li:css(color: red)').css('background', 'black');
});
.red { color: red; }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<ul>
<li class="red">1</li>
<li style="color: red">2</li>
<li style="color: blue">3</li>
<li>4</li>
</ul>