2013-07-05 8 views
1

2 개의 입력을 사용하여 검색 결과를 필터링하는 코드가 있습니다. 나는 이것을 위해 jquery를 사용하고있다.jquery로 필터링하고 대문자와 소문자를 검색하는 방법은 무엇입니까?

<script> 
$(document).ready(function() { 
    $(".search").keyup(function() { 

     $(".searchli").hide(); 

     if ($("#refine").val() != "") { 
      var term = $("#search").val() + " " + $("#refine").val(); 
     } else { 
      var term = $("#search").val(); 
     } 

     $("li:contains('" + term + "')").show(); 
    }); 
});  
</script> 

Search: <input type="search" id="search" class="search" length="24" /> 
Refine <input type="search" id="refine" class="search" length="24" /> 

결과가있는 목록에는 대문자와 소문자가 포함되어 있습니다. 내 문제는 소문자로 검색 할 수 없다는 것입니다. (소문자로 키워드 입력) 결과를 찾을 수 없습니다.

내 코드에 toLowerCase() 또는 toUpperCase()을 어떻게 추가하여 사용할 수 있습니까? (가)의 경우 insensive로 기능을 포함 패치를

답변

1

입니다 jQuery에는 this page에있는이 스 니펫을 사용하여 대소 문자를 무시하는 셀렉터가 포함되어 있습니다.

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

다른 방법으로 : contains (다른 스크립트에서 이론적으로 이상한 동작이 발생할 수 있음)를 재정의하는 대신 containsInvariant 또는 something을 호출하여 새 선택기를 만들 수 있습니다.

편집 :이 jQuery를의 모든 버전과 호환되지 않습니다, 그래서 here's one 그 모든 버전에서 작동합니다 :이 :)을 넣어해야합니까

// An implementation of a case-insensitive contains pseudo 
// made for all versions of jQuery 
(function($) { 

function icontains(elem, text) { 
    return (
     elem.textContent || 
     elem.innerText || 
     $(elem).text() || 
     "" 
    ).toLowerCase().indexOf((text || "").toLowerCase()) > -1; 
} 

$.expr[':'].icontains = $.expr.createPseudo ? 
    $.expr.createPseudo(function(text) { 
     return function(elem) { 
      return icontains(elem, text); 
     }; 
    }) : 
    function(elem, i, match) { 
     return icontains(elem, match[3]); 
    }; 

})(jQuery); 
+0

어디에 넣어야합니까? jquery.min.js 파일이있어서 잘 모르겠습니다. –

+0

@KeesSonnema 자신의 스크립트 시작 부분에 넣으십시오. 그다지 중요하지 않지만,'document.ready'가 가장 이해하기 쉽습니다. – Archer

+0

오케이. 시도 할 것이다. –

0

사용 this ...

편집는 - 여기 당신은을 무시할 수 코드

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

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

JQuery와 1.8 버전

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

를? –

+0

귀하의 페이지에, 특히 페이지의 pageload 이벤트에 넣어 ... –