Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Jquery filter list without case sensitive

Tags:

jquery

I want to filter the list without case sensitive. I want to match only character not match upper case or lower case.

  1. XXXXXXX
  2. yyyyyyy
  3. XXxxx

If I enter "X" in search box it displays both 1 and 3. I added the code below but it match the case sensitive also.

<!DOCTYPE html>
<html>
<head>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js">
</script>
<script>
    function filter(element) {
        var value = $(element).val();
        $("#theList > li").each(function() {
            if ($(this).text().search(value) > -1) {
                $(this).show();
            }
            else {
                $(this).hide();
            }
        });
    }
</script>
</head>
<body>
<input type="text" onkeyup="filter(this)" />
<ul id="theList">
    <li>xxvxvxx</li>
    <li>yyyyyyyyyy</li>
    <li>rrrrrrrrrr</li>
    <li>vvvvvvvvvvv</li>
    <li>xcvcvdfsdf</li>
    <li>hkjhkhjkh</li>
    <li>xzfgfhfgh</li>
</ul>

</body>
</html>
like image 331
user Avatar asked Aug 10 '13 10:08

user


3 Answers

You need to use indexOf

$(this).text().search(value)

supposed to be

$(this).text().indexOf(value)

And why do you want to attach your event using the attribute tag.It is a bad practice and should be avoided.

You can use jQuery to attach the event.

$('input').keyup(function() {
    filter(this); 
});

function filter(element) {
    var value = $(element).val().toLowerCase();
    $("#theList > li").each(function () {
        var $this = $(this),
            lower = $this.text;
        if (lower.indexOf(value) > -1) {
            $this.show();
        } else {
            $this.hide();
        }
    });
}

Check Fiddle

Same function a little better using filter

function filter(element) {
    var value = $(element).val().toLowerCase();
    $("#theList > li").hide().filter(function() {
        return $(this).text().toLowerCase().indexOf(value) > -1;
    }).show();
}
like image 64
Sushanth -- Avatar answered Nov 14 '22 18:11

Sushanth --


Just Add jQuery.expr[":"].contains = function (a, i, m) { return (a.textContent || a.innerText || "").toUpperCase().indexOf(m[3].toUpperCase())>=0;};

like image 43
Adam Everington Avatar answered Nov 14 '22 16:11

Adam Everington


Just replace

$(this).text().search(value) > -1

with:

$(this).text().search(new RegExp(value, "i")) > -1

and that should do the trick. Here is a working FIDDLE

like image 5
face Avatar answered Nov 14 '22 18:11

face