Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do I make jQuery Contains case insensitive, including jQuery 1.8+?

I'm trying to use "contains" case insensitively. I tried using the solution at the following stackoverflow question, but it didn't work:

Is there a case insensitive jQuery :contains selector?

For convenience, the solution is copied here:

jQuery.extend(         jQuery.expr[':'], {                  Contains : "jQuery(a).text().toUpperCase().indexOf(m[3].toUpperCase())>=0"  }); 

Here is the error:

Error: q is not a function Source File: /js/jquery-1.4.js?ver=1.4 Line: 81 

Here's where I'm using it:

  $('input.preset').keyup(function() {     $(this).next().find("li").removeClass("bold");     var theMatch = $(this).val();     if (theMatch.length > 1){       theMatch = "li:Contains('" + theMatch + "')";       $(this).next().find(theMatch).addClass("bold");     }   }); 

My use of the original case sensitive "contains" in the same scenario works without any errors. Does anyone have any ideas? I'd appreciate it.

like image 258
Matrym Avatar asked Feb 04 '10 00:02

Matrym


People also ask

Is jQuery selector case-sensitive?

jQuery attribute value selectors are generally case-sensitive.

How use contains in jQuery?

jQuery :contains() SelectorThe :contains() selector selects elements containing the specified string. The string can be contained directly in the element as text, or in a child element. This is mostly used together with another selector to select the elements containing the text in a group (like in the example above).


1 Answers

This is what i'm using in a current project, haven't had any problems. See if you have better luck with this format:

jQuery.expr[':'].Contains = function(a, i, m) {    return jQuery(a).text().toUpperCase().indexOf(m[3].toUpperCase()) >= 0;  }; 

In jQuery 1.8 the API for this changed, the jQuery 1.8+ version of this would be:

jQuery.expr[":"].Contains = jQuery.expr.createPseudo(function(arg) {     return function( elem ) {         return jQuery(elem).text().toUpperCase().indexOf(arg.toUpperCase()) >= 0;     }; }); 

You can test it out here. For more detail on 1.8+ custom selectors, check out the Sizzle wiki here.

like image 179
Nick Craver Avatar answered Oct 21 '22 11:10

Nick Craver