jQuery : 텍스트로 요소 찾기


308

누구든지 id 또는 클래스가 아닌 내용을 기반으로 요소를 찾을 수 있는지 말해 줄 수 있습니까 ?

고유 한 클래스 또는 ID가없는 요소를 찾으려고합니다. 그런 다음 해당 요소의 부모를 찾아야합니다.



답변:


432

:contains선택기를 사용하여 내용을 기반으로 요소를 가져올 수 있습니다 .

여기 데모

$('div:contains("test")').css('background-color', 'red');
<div>This is a test</div>
<div>Another Div</div>

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>


2
훌륭하지만 대소 문자를 구분합니다. 어쨌든 대소 문자를 구분하지 않는 검색을 할 수 있습니까?
Dipu Raj

123
@DipuRaj : .filter대신 사용해야 합니다. $('div').filter(function(){ return $(this).text().toLowerCase() === 'test';})
로켓 Hazmat

5
예, @RocketHazmat에서 사용하는 접근 방식을 사용하십시오. 'Register Contract'라는 접두사 가 5 개이고 각각 접미사가 있습니다. 실제로는 'Register Contract 26'이라는 텍스트가있는 요소 만 원할 때 모두선택하게 됩니다 .
Feng Huo

1
: contains는 대소 문자를 구분하지만 찾을 정확한 텍스트 문자열을 전달했기 때문에 효과가있었습니다.
Francisco Quintero

1
다른 사람이 자신의 공간에서 공백을 사용하는 것을 돕는 경우 다음과 같은 기능이 작동 하지 않습니다 .$('div:contains( "test" )').css('background-color', 'red');
M Katz

92

jQuery 문서에서는 다음과 같이 말합니다.

일치하는 텍스트는 선택한 요소, 해당 요소의 자손 또는 조합에서 직접 나타날 수 있습니다

따라서 :contains() selector 를 사용하는 것만으로는 충분하지 않으며 , 검색하는 텍스트 가 대상 요소 의 직접 컨텐츠 인지 확인해야 합니다.

function findElementByText(text) {
    var jSpot = $("b:contains(" + text + ")")
                .filter(function() { return $(this).children().length === 0;})
                .parent();  // because you asked the parent of that element

    return jSpot;
}

3
이 정확한 문제에 부딪쳤다. 이보다 높아야합니다.
DickieBoy

2
이 솔루션은 다음 시나리오에서 실패 할 수 있습니다 <li>Hello <a href='#'>World</a>, How Are You. .. 여기 How에서 검색되는 경우 조건이 실패한다고 생각합니다.
me_digvijay

23

Fellas, 나는 이것이 오래되었다는 것을 알고 있지만, 나는이 솔루션을 모두보다 잘 작동한다고 생각합니다. 우선 jquery : contains ()가 제공되는 대소 문자 구분을 극복하십시오.

var text = "text";

var search = $( "ul li label" ).filter( function ()
{
    return $( this ).text().toLowerCase().indexOf( text.toLowerCase() ) >= 0;
}).first(); // Returns the first element that matches the text. You can return the last one with .last()

가까운 장래에 누군가 도움이 되길 바랍니다.


18

로켓의 대답이 작동하지 않습니다.

<div>hhhhhh
<div>This is a test</div>
<div>Another Div</div>
</div>

여기서 간단히 그의 데모 를 수정 하면 루트 DOM이 선택되었음을 알 수 있습니다.

$('div:contains("test"):last').css('background-color', 'red');

이 문제를 해결하려면 코드 에 " : last "선택기를 추가 하십시오.


이것은 선택자가 여러 결과를 반환 할 때 가장 효과적이며 참조 할 "Id"속성이없는 특정 요소로 범위를 좁혀 야합니다.
Tahir Khalid

14

내 의견으로는 가장 좋은 방법입니다.

$.fn.findByContentText = function (text) {
    return $(this).contents().filter(function () {
        return $(this).text().trim() == text.trim();
    });
};

8

예, jQuery contains선택기를 사용하십시오 .


10
어, 아니하지 않는다 '포함'모래 사장에서 바늘이 (따라서 이름) 포함 여부 만, 정확히 일치하지 않습니다 ... 다른 사람이 여기에 말했듯이
마이크 설치류

3
이것은 답이 아닙니다.
lharby

4

다음 jQuery는 텍스트를 포함하지만 자식이없는 div 노드 (DOM 트리의 리프 노드)를 선택합니다.

$('div:contains("test"):not(:has(*))').css('background-color', 'red');
<div>div1
<div>This is a test, nested in div1</div>
<div>Nested in div1<div>
</div>
<div>div2 test
<div>This is another test, nested in div2</div>
<div>Nested in div2</div>
</div>
<div>
div3
</div>

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>


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