Skip to content

Instantly share code, notes, and snippets.

@TikiTDO
Last active August 29, 2015 13:57
Show Gist options
  • Save TikiTDO/9834535 to your computer and use it in GitHub Desktop.
Save TikiTDO/9834535 to your computer and use it in GitHub Desktop.
CSS Property Search
# Filter DOM elements that match all the given CSS rules
# Search Spec: {
# 'css_rule': value,
# OR
# 'css_rule': boolean_callback
# Example:
# $('div').find_by_css({body: 'white'}) # => All divs with css style body == 'white'
#
# var is_even = function (value) {value % 2 == 0}}
# $('div').find_by_css({'font-size': is_even) # => All divs with an event font size
$.fn.find_by_css = (search_spec) ->
# Calculate dynamic search spec
dynamic_spec = {}
for css_rule, css_value of search_spec
if typeof css_value == 'function'
dynamic_spec[css_rule] = css_value
else
dynamic_spec[css_rule] = (val) -> val == css_value
return $(this).filter () ->
element = $(this)
ret = true
for css_rule, css_checker of dynamic_spec
ret &= css_checker(element.css(css_rule))
ret
###
// Generated by CoffeeScript 1.7.1
$.fn.find_by_css = function(search_spec) {
var css_rule, css_value, dynamic_spec;
dynamic_spec = {};
for (css_rule in search_spec) {
css_value = search_spec[css_rule];
if (typeof css_value === 'function') {
dynamic_spec[css_rule] = css_value;
} else {
dynamic_spec[css_rule] = function(val) {
return val === css_value;
};
}
}
return $(this).filter(function() {
var css_checker, element, ret;
element = $(this);
ret = true;
for (css_rule in dynamic_spec) {
css_checker = dynamic_spec[css_rule];
ret &= css_checker(element.css(css_rule));
}
return ret;
});
};
###
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment