복붙노트

[JQUERY] jQuery를 구분하지 않는 경우가있다 : 선택기를 포함?

JQUERY

jQuery를 구분하지 않는 경우가있다 : 선택기를 포함?

해결법


  1. 1.내가 jQuery를 1.2 일을 결국 것은 :

    내가 jQuery를 1.2 일을 결국 것은 :

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

    이것은 가지고 JQuery와 연장됩니다 경우를 구분하지 않습니다 선택기를 포함의 : 선택은 그대로 유지가 포함되어 있습니다.

    편집 : jQuery를 1.3 (user95227 @ 감사) 이상이 필요

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

    편집하다: 분명히 사용하여 직접 DOM에 접근

    (a.textContent || a.innerText || "") 
    

    대신에

    jQuery(a).text()
    

    이전 식을 속도에서 속도가 문제가되는 경우 상당히 그래서 당신의 자신의 위험에보십시오. (@ 존의 질문 참조)

    최신 편집 : jQuery를 1.8 것이되어야합니다 :

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

  2. 2.이 선택적으로 대소 문자를 구분 만들려면 : http://bugs.jquery.com/ticket/278

    이 선택적으로 대소 문자를 구분 만들려면 : http://bugs.jquery.com/ticket/278

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

    다음 사용 containsi 대신을 : 포함


  3. 3.jQuery를 1.3로,이 방법은 사용되지 않습니다. 작업이를 얻으려면이 함수로 정의 할 필요가있다 :

    jQuery를 1.3로,이 방법은 사용되지 않습니다. 작업이를 얻으려면이 함수로 정의 할 필요가있다 :

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

  4. 4.(나 같은) 사람이 관심이 있다면 a와 m [3] 평균에서이 정의를 포함하는 일.

    (나 같은) 사람이 관심이 있다면 a와 m [3] 평균에서이 정의를 포함하는 일.

    KEY / 전설 :에 Params 셀렉터 정의에 사용하기 위해 jQuery를에 의해 제공 :

    R = 요소의 jQuery 배열 자세히 조사된다. (예 : r.length = 요소의 수)

    저는 어레이 내에 R, 현재 주목 받고 요소의 인덱스 =.

    현재 주목 받고 A = 요소. 선택기 문은 일치하는 결과에 포함하는 경우는 true 반환해야합니다.

    m [2] = * 여기서 nodeName 또는 그 우리 찾는 콜론 (왼쪽).

    m [3] = PARAM에 전달 : 선택기 (PARAM). 일반적으로하는 인덱스 번호 : n 번째의 식 (5), 또는 같은 문자열 : 색 (파란색).


  5. 5.jQuery를 1.8에서 당신은 사용해야합니다

    jQuery를 1.8에서 당신은 사용해야합니다

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

  6. 6.보이는 변화는 약간 빠른 수행하고 또한 정규 표현식입니다 수 있습니다 :

    보이는 변화는 약간 빠른 수행하고 또한 정규 표현식입니다 수 있습니다 :

    jQuery.extend (
        jQuery.expr[':'].containsCI = function (a, i, m) {
            //-- faster than jQuery(a).text()
            var sText   = (a.textContent || a.innerText || "");     
            var zRegExp = new RegExp (m[3], 'i');
            return zRegExp.test (sText);
        }
    );
    

    뿐만 아니라이 대소 문자를 구분하지만 같은 강력한 검색을 할 수 있습니다 :


  7. 7.늦을 수 있습니다 ....하지만,

    늦을 수 있습니다 ....하지만,

    나는이 길을 갈 선호하는 것 ..

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

    이런 식으로, 당신은 당신이 무단으로 변경하는 경우 기본 하나 나중에 ... 다시 유래에 자신을 찾을 수 있습니다해야 할 수도 있습니다 ... jQuery의 NATIVE '.contains'하지 변조 DO ...


  8. 8.

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

    업데이트 코드는 1.3에서 잘 작동하지만, 앞의 예와는 달리 첫 글자에 소문자해야 "할 수 있습니다."


  9. 9.사용 아래를 참조하십시오 "포함"텍스트는 HTML 코드에서의 대소 문자 구분을 무시 찾기 위해,

    사용 아래를 참조하십시오 "포함"텍스트는 HTML 코드에서의 대소 문자 구분을 무시 찾기 위해,

     $.expr[":"].contains = $.expr.createPseudo(function(arg) {
                return function( elem ) {
                    return $(elem).text().toUpperCase().indexOf(arg.toUpperCase()) >= 0;
                };
            });
            $("#searchTextBox").keypress(function() {
              if($("#searchTextBox").val().length > 0){
                $(".rows").css("display","none");
                var userSerarchField = $("#searchTextBox").val();
                $(".rows:contains('"+ userSerarchField +"')").css("display","block");
              } else {
                $(".rows").css("display","block");
              }              
            });
    

    또한 경우에 당신의 JQuery와 버전을 기반으로 코드를 무시 찾으려면이 링크를 사용할 수 있습니다, jQuery를 확인 : 대소 문자 구분을 포함


  10. 10.정규 표현식을 사용하는 빠른 버전.

    정규 표현식을 사용하는 빠른 버전.

    $.expr[':'].icontains = function(el, i, m) { // checks for substring (case insensitive)
        var search = m[3];
        if (!search) return false;
    
        var pattern = new RegExp(search, 'i');
        return pattern.test($(el).text());
    };
    

  11. 11.나는하지 다음 작업에 비슷한 문제가 있었다 ...

    나는하지 다음 작업에 비슷한 문제가 있었다 ...

    // This doesn't catch flac or Flac
    $('div.story span.Quality:not(:contains("FLAC"))').css("background-color", 'yellow');
    

    이 작업 및 연장 필요없이

    $('div.story span.Quality:not([data*="flac"])').css("background-color", 'yellow');
    

    이 .... 너무 작동하지만, 아마도 "수동 루핑"카테고리에 속하는

    $('div.story span.Quality').contents().filter(function()
    {
      return !/flac/i.test(this.nodeValue);
    }).parent().css("background-color", 'yellow');
    

  12. 12.새로운 나는 그것이 문자열의 이름을 지정하고 일부 요소 텍스트에서 검색 할 문자열을 넣어주는 변수입니다. 그런 다음 JQuery와 선택기 요소를 선택하여 당신은 () .filter에 의해 내 예를 들어 $ ( "elementsYouNeed") 및 필터처럼 필요가있다. .filter에서 ()는 함수와 $의 각 요소 ( "elementsYouNeed")를 비교합니다.

    새로운 나는 그것이 문자열의 이름을 지정하고 일부 요소 텍스트에서 검색 할 문자열을 넣어주는 변수입니다. 그런 다음 JQuery와 선택기 요소를 선택하여 당신은 () .filter에 의해 내 예를 들어 $ ( "elementsYouNeed") 및 필터처럼 필요가있다. .filter에서 ()는 함수와 $의 각 요소 ( "elementsYouNeed")를 비교합니다.

    그것에 문자열이있는 경우에는 기능 또한 그 캔 않도록 대소 문자 조건 검사 문자열 요소 텍스트 .toLowerCase ()을 사용. .filter () 메소드는 정합 소자들의 서브 세트로부터 새로운 jQuery를 객체를 생성 이후.

    이제 matchObjects에서 일치하는 요소를 얻을 당신이 원하는대로 할 수 있습니다.

    var subString ="string you want to match".toLowerCase();
    
    var matchObjects = $("elementsYouNeed").filter(function () {return $(this).text().toLowerCase().indexOf(subString) > -1;});
    
  13. from https://stackoverflow.com/questions/187537/is-there-a-case-insensitive-jquery-contains-selector by cc-by-sa and MIT license