Bug Tracker

Opened 11 years ago

Closed 11 years ago

Last modified 3 years ago

#278 closed enhancement (worksforme)

Make :contains() be optionally case insensitive

Reported by: yehuda Owned by:
Priority: trivial Milestone:
Component: core Version:
Keywords: Cc:
Blocked by: Blocking:

Description (last modified by dmethvin)

At the moment, :contains() is case sensitive only.

We need a way to make it optionally case insensitive.

Change History (10)

comment:1 Changed 11 years ago by anonymous

Priority: majortrivial
Type: bugenhancement

comment:2 Changed 11 years ago by joern

Milestone: 1.0
Resolution: worksforme
Status: newclosed
Version: 1.0

This could easily be added when required:

$.extend($.expr:?, {

"contains-ic": "jQuery.fn.text.apply([a])toLowerCase().indexOf(m[3].toLowerCase())>=0",


Untested, but pretty simple.

comment:3 in reply to:  2 Changed 9 years ago by weaverryan

If anybody's looking for a tested version of the above:

	jQuery.extend(jQuery.expr[':'], {
		"contains-ic": "jQuery.fn.text.apply([a]).toLowerCase().indexOf(m[3].toLowerCase())>=0",

comment:4 Changed 8 years ago by thewiredmous

Thanks weaverryan, however I had an error with this code in Internet Explorer until i removed the extra comma from the second line:


jQuery.extend(jQuery.expr:?, {

"contains-ic": "jQuery.fn.text.apply([a]).toLowerCase().indexOf(m[3].toLowerCase())>=0",



jQuery.extend(jQuery.expr:?, {

"contains-ic": "jQuery.fn.text.apply([a]).toLowerCase().indexOf(m[3].toLowerCase())>=0"


Works like a charm now!

comment:6 in reply to:  5 ; Changed 8 years ago by Abro

Replying to mike123: could someone please del. this spam?

@thewiredmous : Firefox gives me a "X is not defined in jquery-1.3.2.js"

comment:7 in reply to:  6 Changed 8 years ago by Abro

Replying to Abro:

$.extend($.expr[':'], {
  'containsi': function(elem, i, match, array)
    return (elem.textContent || elem.innerText || '').toLowerCase()
    .indexOf((match[3] || "").toLowerCase()) >= 0;

Works - thanks to Eric.

comment:8 Changed 6 years ago by reesd

I think contains should be case insensitive in the core.

comment:9 Changed 5 years ago by anonymous

Agreed, insensitive should be preferred by default.

comment:10 Changed 5 years ago by dmethvin

Description: modified (diff)

In addition to the one mentioned above, there is one (icontains) in the docs for Sizzle:


As far as changing the default, forget it. That would break code. The tools are right here for meeting your needs, they don't need to be in core for you to use them.

comment:11 Changed 3 years ago by lsloan-jquery.com@…

I appreciate that :contains() cannot be changed to case-insensitive by default because it would break existing code. However, it's unacceptable to make the user search the Internet to find the workaround mentioned in this ticket. Please add a :containsIgnoreCase() selector to base jQuery. It's silly that it doesn't have this already.

Note: See TracTickets for help on using tickets.