[jquery] jQuery 1.8 이상을 포함하여 jQuery 포함을 대소 문자를 구분하지 않게하려면 어떻게해야합니까?

대소 문자를 구분하지 않고 “포함”을 사용하려고합니다. 다음 stackoverflow 질문에서 솔루션을 사용해 보았지만 작동하지 않았습니다.

대소 문자를 구분하지 않는 jQuery : contains selector가 있습니까?

편의를 위해 솔루션이 여기에 복사됩니다.

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

오류는 다음과 같습니다.

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

내가 사용하는 곳은 다음과 같습니다.

  $('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");
    }
  });

동일한 시나리오에서 원래 대소 문자 구분 “포함”을 사용하면 오류없이 작동합니다. 누구에게 아이디어가 있습니까? 감사합니다.



답변

이것은 현재 프로젝트에서 사용하고 있으며 문제가 없었습니다. 이 형식으로 더 나은 운이 있는지 확인하십시오.

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

jQuery 1.8에서 이에 대한 API가 변경되었으며 jQuery 1.8+ 버전은 다음과 같습니다.

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

여기에서 테스트 할 수 있습니다 . 1.8 개 이상의 사용자 지정 선택기에 대한 자세한 내용은 여기에서 Sizzle 위키를 확인하세요 .


답변

대답은 정확하지만 예상치 못한 동작을 유발할 수 :Contains있는 별칭 :contains(또는 민감하고 민감하지 않은 검색을 모두 필요로하는 고급 응용 프로그램을 위해 디자인에 의해 사용될 수 있음) 만 포함한다는 점에 주목할 가치가 있습니다.

별칭에 대한 확장명을 복제하여 해결할 수 있습니다.

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

왜 그것이 나를 위해 작동하지 않는지 알아내는 데 시간이 걸렸습니다.


답변

나는 이렇게 할 것이다

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

그리고 떠나 :contains 혼자 …

데모

그렇다면 왜 jQuery가 라이브러리에서 지원하지 않습니까?! 그렇게 쉽다면 …

귀하의 코드가 터키 코드를 전달 하기 때문 입니까?


답변

늦어도 ….하지만,

이쪽으로 가고 싶어요 ..

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

이렇게하면 jQuery의 NATIVE ‘.contains’를 조작 하지 마십시오. 나중에 기본값이 필요할 수 있습니다 … 조작하면 stackOverFlow로 돌아갈 수 있습니다 .


답변

내 친구를 추가 할 수 있습니다.

$.expr[":"].containsNoCase = function (el, i, m) {
    var search = m[3];
    if (!search) return false;
    return eval("/" + search + "/i").test($(el).text());
}; 


답변

아래 코드를 사용하여 원하는 것을 얻기 위해 jQuery의 대소 문자 구분을 모두 무시할 수있었습니다.

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

이 링크를 사용하여 https://css-tricks.com/snippets/jquery/make-jquery-contains-case-insensitive/에서 대소 문자 구분을 무시하는 jQuery 버전을 기반으로 코드를 찾을 수 있습니다.

또한 : contains를 사용하고 검색을하려면 http://technarco.com/jquery/using-jquery-search-html-text-and-show-or-hide-를 살펴볼 수 있습니다. 따라서


답변