가 대소문자를 구분하지 않 jQuery:이 포함되 선택?
-
06-07-2019 - |
문제
가 대소문자를 구분하지 않전 :함 jQuery 를 선택해야 하나 수동으로 작업하여 반복을 통해 모든 요소와 비교합니다.텍스트()나열?
해결책
내가 무슨 일을 했을 위한 jQuery1.2:
jQuery.extend(
jQuery.expr[':'], {
Contains : "jQuery(a).text().toUpperCase().indexOf(m[3].toUpperCase())>=0"
});
이 연장됩니다 jquery 을 포함하는 선택기는 대소문자를 구분하지 않,이:담 선택은 변경되지 않습니다.
편집:에 대한 jQuery1.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 ko 질문)
최신 편집:에 대한 jQuery1.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
로 jQuery1.3,이 방법은 사용되지 않습니다.이것이 그것을 정의할 필요 기능:
jQuery.expr[':'].Contains = function(a,i,m){
return jQuery(a).text().toUpperCase().indexOf(m[3].toUpperCase())>=0;
};
만약 누군가가(나 같은)관심이 무엇 a 고 m[3] 말 담고 정의합니다.
키/범례:Params 사용할 수 있 jQuery 에서 사용하기 위해 선택의 정의:
r =jQuery 배열의 요소를 철저히 조사.(예를 들어: r.길이 =숫자의 요소)
나 =index 요소의 현재 조사에서,내열 r.
a =소재 조사를 실시한다.선택한 문 true 를 반환해야 합니다 그것을 포함하에 그것의 일치하는 결과입니다.
m[2] =노드 이름 또는*는 우리를 찾고(왼쪽에 콜론).
m[3] =param 로 전달되:선택(param).일반적으로 인덱스 번호로에서 :n-의 유형(5), 거나,문자열에서와 같이, :색상(블루).
에 jQuery1.8 을 사용해야 합니다
jQuery.expr[":"].icontains = jQuery.expr.createPseudo(function (arg) {
return function (elem) {
return jQuery(elem).text().toUpperCase().indexOf(arg.toUpperCase()) >= 0;
};
});
변형하는 것을 수행하는 약간 더 빠르고는 또한 용 정규 표현식 입니다:
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')")
(일치하""또는"최대한다"고 주장했다,그러나"upper","wakeup",등.)$("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;
}
});
이 방법은,당신 지 변조의 기본 jQuery '.담'...필요할 수 있습니다 기본적으로 하나 나중에...을 경우 변조,당신은 자신을 찾을 수 있습니다 다시 유래...
jQuery.expr[':'].contains = function(a,i,m){
return jQuery(a).text().toUpperCase().indexOf(m[3].toUpperCase())>=0;
};
업데이트 코드 작품에서 중대한 1.3,그러나""를 포함해야 낮은 경우에는 첫 번째 편지와 달리 이전의 예입니다.
참조를 사용하려면 아래":"도 포함되어 텍스트를 찾을 무시하고 해당 경우에서 감도 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:을 포함 대소문자를 구분
나는 유사한 문제는 다음과 같은 작동하지 않...
// 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');
빠른 버전을 사용하여 정규표현식이 있습니다.
$.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());
};