답변:
내가 jQuery 1.2를 위해했던 일은 다음과 같습니다.
jQuery.extend(
jQuery.expr[':'], {
Contains : "jQuery(a).text().toUpperCase().indexOf(m[3].toUpperCase())>=0"
});
이것은 jquery를 확장하여 : 대소 문자를 구분하지 않는 선택자를 포함하고 : contains 선택기를 변경하지 않고 유지합니다.
편집 : 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()
앞의 표현에서는 속도가 상당히 빨라지므로 속도가 문제가되면 위험을 감수하십시오. ( @John 의 질문 참조 )
최신 편집 : jQuery 1.8의 경우 다음과 같아야합니다.
jQuery.expr[":"].Contains = jQuery.expr.createPseudo(function(arg) {
return function( elem ) {
return jQuery(elem).text().toUpperCase().indexOf(arg.toUpperCase()) >= 0;
};
});
선택적으로 대소 문자를 구분하지 않으려면 다음을 수행하십시오. 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
대신에 사용:contains
누군가 (나 같은) 관심이 있다면 포함 정의 에서 a 와 m [3]의 의미는 무엇입니까 ?
KEY / LEGEND : 선택기 정의에 사용하기 위해 jQuery에서 사용할 수있는 매개 변수 :
r = 면밀히 조사되는 요소의 jQuery 배열. (예 : r.length = 요소 수)
저는 어레이 내에 현재 주목 받고 요소의 인덱스 = R .
a = 현재 감시중인 요소. 선택기 명령문은 일치하는 결과에 포함 시키려면 true를 리턴해야합니다.
m [2] = 우리가 찾고있는 nodeName 또는 * (콜론의 왼쪽).
m [3] = 매개 변수가 : selector (param)에 전달되었습니다. 일반적으로하는 인덱스 번호 : n 번째의 식 (5) , 또는 같은 문자열 : 색 (파란색) .
약간 더 빠르게 수행되고 정규 표현식을 허용 하는 변형은 다음과 같습니다 .
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);
}
);
대소 문자를 구분하지 않을뿐만 아니라 다음과 같은 강력한 검색을 허용합니다.
$("p:containsCI('\\bup\\b')")
( "위"또는 "위"와 일치하지만 "위", "위상"등은 일치하지 않습니다.)$("p:containsCI('(?:Red|Blue) state')")
( "적색 상태"또는 "청색 상태"와 일치하지만 "업 상태"등은 일치하지 않습니다.)$("p:containsCI('^\\s*Stocks?')")
"주식"또는 "주식"과 일치하지만 단락의 시작 부분에서만 시작합니다 (앞의 공백은 무시).늦을지도 모르지만 ...
이런 식으로 가고 싶습니다 ..
$.extend($.expr[":"], {
"MyCaseInsensitiveContains": function(elem, i, match, array) {
return (elem.textContent || elem.innerText || "").toLowerCase().indexOf((match[3] || "").toLowerCase()) >= 0;
}
});
이 방법을 사용하면 NOT DO jQuery의 NATIVE와 변조 '.contains' 당신이 무단으로 변경하는 경우 기본 하나 나중에 ... 다시 자신을 찾을 수 있습니다해야 할 수도 있습니다 ... 유래 ...
HTML 코드에서 대소 문자 구분을 무시하고 텍스트를 찾으려면 ": contains"를 사용하려면 아래를 참조하십시오.
$.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 버전에 따라 대소 문자 무시 코드를 찾을 수 있습니다. Make jQuery : 대소 문자를 구분하지 않습니다.
정규식을 사용하는 더 빠른 버전입니다.
$.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());
};
다음과 같이 작동하지 않는 비슷한 문제가 발생했습니다 ...
// 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');
새로운 변수 이름을 subString으로 지정하고 검색하려는 문자열을 일부 요소 텍스트에 넣습니다. 그런 다음 Jquery 선택기 select 요소를 사용하여 예 $("elementsYouNeed")
와 같이 필터링하고 필터링하십시오 .filter()
. 에서 .filter()
각 요소를 $("elementsYouNeed")
함수와 비교 합니다.
.toLowerCase()
요소 텍스트에 사용하는 함수에서 subString은 대소 문자를 구분하지 않고 subString이 있는지 확인할 수 있습니다. 그런 다음이 .filter()
메소드는 일치하는 요소의 서브 세트에서 새 jQuery 오브젝트를 구성합니다.
이제 matchObjects에서 match 요소를 가져 와서 원하는대로 수행 할 수 있습니다.
var subString ="string you want to match".toLowerCase();
var matchObjects = $("elementsYouNeed").filter(function () {return $(this).text().toLowerCase().indexOf(subString) > -1;});