Skip to content

@Mottie /gist:461488
Last active

Embed URL

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Improved jQuery :contains() selector
/* jQuery selector to match exact text inside an element
* http://wowmotty.blogspot.com/2010/05/jquery-selectors-adding-contains-exact.html
* :containsExact() - case insensitive
* :containsExactCase() - case sensitive
* :containsRegex() - set by user ( use: $(el).find(':containsRegex("/(red|blue|yellow)/gi")') )
*/
$.extend( $.expr[":"], {
containsExact: $.expr.createPseudo ?
$.expr.createPseudo(function(text) {
return function(elem) {
return $.trim(elem.innerHTML.toLowerCase()) === text.toLowerCase();
};
}) :
// support: jQuery <1.8
function(elem, i, match) {
return $.trim(elem.innerHTML.toLowerCase()) === match[3].toLowerCase();
},
containsExactCase: $.expr.createPseudo ?
$.expr.createPseudo(function(text) {
return function(elem) {
return $.trim(elem.innerHTML) === text;
};
}) :
// support: jQuery <1.8
function(elem, i, match) {
return $.trim(elem.innerHTML) === match[3];
},
containsRegex: $.expr.createPseudo ?
$.expr.createPseudo(function(text) {
var reg = /^\/((?:\\\/|[^\/])+)\/([mig]{0,3})$/.exec(text);
return function(elem) {
return reg ? RegExp(reg[1], reg[2]).test($.trim(elem.innerHTML)) : false;
};
}) :
// support: jQuery <1.8
function(elem, i, match) {
var reg = /^\/((?:\\\/|[^\/])+)\/([mig]{0,3})$/.exec(match[3]);
return reg ? RegExp(reg[1], reg[2]).test($.trim(elem.innerHTML)) : false;
}
});
@Mottie
Owner

Updated to use innerHTML to prevent matches on nested tags

@Mottie
Owner

Added a ":containsRegex" selector which also allows you to add flags. See this demo page.

@Mottie
Owner

Updated again with a note about double escaping any regex and added a check on the "reg" variable in case it is null.

@Mottie
Owner

Updated to work with jQuery 1.8 changes. Note that the :containsRegex() selector will now need quotes around the regex

@hhfa1990

Awesome, Thks!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Something went wrong with that request. Please try again.