jQuery 선택기 정규식


580

jQuery 선택기와 함께 와일드 카드 또는 정규 표현식 (정확한 용어는 확실하지 않음) 사용에 대한 설명서를 읽었습니다.

나는 이것을 직접 찾았지만 구문과 사용법에 대한 정보를 찾을 수 없었습니다. 구문에 대한 문서가 어디에 있는지 아는 사람이 있습니까?

편집 : 속성 필터를 사용하면 속성 값의 패턴을 기반으로 선택할 수 있습니다.

답변:


339

James Padolsey 는 정규식을 선택할 수 있는 훌륭한 필터 를 만들었습니다 .

다음이 있다고 가정하십시오 div.

<div class="asdf">

Padolsey의 :regex필터는 다음과 같이 선택할 수 있습니다.

$("div:regex(class, .*sd.*)")

또한 선택기 공식 문서를 확인하십시오 .


3
확인. 나는 거기에 있었지만 실제로 내가 찾고있는 이름을 몰랐습니다. 나는 또 다른 모습을 보였고 속성 필터를 사용하는 것이 내가 추구 한 것입니다.
Joel Cunningham

@padolsey의 정규식 선택기는 훌륭하게 작동합니다. 다음은 텍스트, 파일 및 확인란 입력 필드 또는 텍스트 영역을 반복 할 수있는 예입니다. $ j ( 'input : regex (type, text | file | checkbox), textarea'). each (function (index) {// ...});
Matt Setter

13
nickf의 아래 답변은 허용되는 답변이어야합니다. 이 답변을 읽는다면 반드시 그 답변을 읽으십시오!
Quentin Skousen

5
오류 : 구문 오류, 인식 할 수없는 표현 : 지원되지 않는 의사 : regex
ryan2johnson9

2
-1. 이것을 구현하는 코드는 답변에 포함되어 있지 않으며 썩음에 연결되기 쉽습니다. 이 (대체하여 해결을 포함하는 정규 표현식에서 쉼표 떨어질 것이다 - 또한, 나는 코드를 테스트하는 동안이 버그를 발견 matchParams.join('')로를 matchParams.join(','))과 일치하는 것을 어떤 패턴 'undefined'이나 'null'일치 undefinednull각각. 이 두 번째 버그는 테스트 된 값 !== undefined!== null먼저 확인하여 해결할 수 있습니다 . 어느 쪽이든, 함수를 전달하는 .filter()것이 더 쉽고 나에게 더 깨끗하고 읽기 쉽습니다.
James T

732

filter함수를 사용하여 더 복잡한 정규식 일치를 적용 할 수 있습니다 .

다음은 처음 세 div와 일치하는 예입니다.

$('div')
  .filter(function() {
    return this.id.match(/abc+d/);
  })
  .html("Matched!");
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

<div id="abcd">Not matched</div>
<div id="abccd">Not matched</div>
<div id="abcccd">Not matched</div>
<div id="abd">Not matched</div>


match (/ abc + d /) 대신 변수를 사용하는 방법; ?
Sasi varna kumar 2016 년

2
@Sasivarnakumar이 질문에 대한 답변이 여기 있습니다
Felipe Maia

283

도움이 될 수 있습니다.

Contains 로 찾는다면 다음과 같습니다.

    $("input[id*='DiscountType']").each(function (i, el) {
         //It'll be an array of elements
     });

Starts With 로 찾는다면 다음과 같습니다.

    $("input[id^='DiscountType']").each(function (i, el) {
         //It'll be an array of elements
     });

Ends With 로 찾는다면 다음과 같습니다.

     $("input[id$='DiscountType']").each(function (i, el) {
         //It'll be an array of elements
     });

주어진 문자열이 아닌 id를 가진 요소를 선택하려면

    $("input[id!='DiscountType']").each(function (i, el) {
         //It'll be an array of elements
     });

이름이 주어진 단어를 포함하는 요소를 선택하려면 공백으로 구분하십시오

     $("input[name~='DiscountType']").each(function (i, el) {
         //It'll be an array of elements
     });

id가 주어진 문자열과 같거나 해당 문자열로 시작하고 하이픈이있는 요소를 선택하려는 경우

     $("input[id|='DiscountType']").each(function (i, el) {
         //It'll be an array of elements
     });

3
멋진 대답하지만, id들, 식별자되고, 공백을 포함 할 수 없습니다 , ~=예는 뭔가 다른, 등을 변경해야 class흰색 공간이 식별자로 구분 된 목록입니다. 같은 상황이 class무엇 ~=속성 선택기를 대상으로했다.
쓸모없는 코드

49

속성이 특정 문자열로 시작하는지 정규식 사용이 테스트로 제한되는 경우 ^JQuery 선택기를 사용할 수 있습니다 .

예를 들어 ID가 "abc"로 시작하는 div 만 선택하려는 경우 다음을 사용할 수 있습니다.

$("div[id^='abc']")

정규식 사용을 피하는 매우 유용한 선택기는 다음에서 찾을 수 있습니다. http://api.jquery.com/category/selectors/attribute-selectors/


대소 문자를 구분하지 않는 일치 요구 사항에는 작동하지 않습니다. .filter 기능은 이러한 요구에 더 잘 맞습니다.
brainondev

2
이것은 나에게 좋았습니다. 입력 ID 끝에 '__destroy'가 있는지 확인하고 싶었습니다 *=.$("input[id*='__destroy'][value='true']")
ryan2johnson9


8

jQuery 함수를 추가하십시오.

(function($){
    $.fn.regex = function(pattern, fn, fn_a){
        var fn = fn || $.fn.text;
        return this.filter(function() {
            return pattern.test(fn.apply($(this), fn_a));
        });
    };
})(jQuery);

그때,

$('span').regex(/Sent/)

텍스트가 / Sent /와 일치하는 모든 범위 요소를 선택합니다.

$('span').regex(/tooltip.year/, $.fn.attr, ['class'])

클래스가 /tooltip.year/와 일치하는 모든 범위 요소를 선택합니다.




2

나는 단지 실시간 예제를 제공하고 있습니다.

네이티브 자바 스크립트에서 다음 스 니펫을 사용하여 id를 가진 요소를 찾기 위해 "select2-qownerName_select-result"로 시작합니다.

document.querySelectorAll("[id^='select2-qownerName_select-result']");

우리가 자바 스크립트에서 jQuery로 전환했을 때 우리는 위의 스 니펫을 다음과 같이 바 꾸었습니다.이 코드는 로직을 방해하지 않고 코드 변경이 적습니다.

$("[id^='select2-qownerName_select-result']")


jQuery없이 가장 효율적인 옵션 만 발견했습니다. 감사합니다!
ggonmar

1

주어진 문자열을 포함하는 요소를 선택하려면 다음 선택기를 사용할 수 있습니다.

$(':contains("search string")')

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.