2011-01-26 2 views
0

어떻게 textpattern으로 모든 텍스트 노드를 선택할 수 있습니까?jquery로 텍스트 노드를 찾는 방법

예 :

<html> 
<body> 
<div>test</div> 
<button>test</button> 
<span title="test"></test> 
</body> 
</html> 

$(select all nodes with text "test") 
+0

"텍스트 패턴 사용"이란 "특정 텍스트 포함"을 의미합니까? –

+1

실제로 텍스트 노드가 필요합니까? 또는 텍스트 노드를 포함하는 요소를 원합니까? '

test
'는 2 노드입니다. 유형 1 요소 W 유형 3 텍스트 노드. – user113716

답변

3

당신은 :contains selector 찾고 :이 속성을 검색하지 않습니다

$('*:contains(test)') 

참고.

+1

하지만 그는 텍스트 노드를 선택하지 않을 것입니다. 이것은 그가 분명히 요구하고있는 것입니다. –

2

하면 클래스 이름에 '시험'에 대해 이야기하는 경우 :

var elements = $('[class]*="test"'); 

아니면 요소의 텍스트에 '시험'에 대해 이야기하는 경우 : 이전

var elements = %('*:contains("test")'); 
0

# 그들의 내용에 기초하여 요소를 선택하기위한 표준 필터 1

하나가되는 방법은 : (텍스트) 필터를 포함한다. 주어진 텍스트가 포함 된 모든 요소와 일치합니다. 주요한 결함은 으로 대소 문자를 구분한다는 것입니다. 개인적으로 대부분의 경우 텍스트 비교 인 은 대소 문자를 구분하지 않아도됩니다. 일반적으로 최종 사용자가 대/소문자를 구분하지 않고 입력 한 텍스트를 찾는 것이 더 직관적입니다. 꽤 약간의 사람들이 인터넷에 나와 동의합니다. 대소 문자를 구별하지 않는 버전의 : 은 인터넷에 나타난 필터 을 포함합니다. 대체 버전의 예는 다음과 같습니다 선택한 텍스트와 당신이 대소 문자를 구분하지 검색을 시뮬레이션 할 수 있습니다 일치하기 전에 대문자로에 대한 을 찾고있는 텍스트를 모두 변환하여

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

. 위의 정의에서 대소 문자를 구분하는 버전과 대/소문자를 구분하지 않는 버전을 사용하는 것의 유일한 차이는 의 대문자 C입니다. 물론 이 코드를 사용하여 작업하는 다른 사람들에게 의미가있는 내용으로 바꿀 수 있습니다. # 당신은 자바 스크립트에 나타났습니다 수 있듯이 2

위의 스 니펫 방법은, (가) 필터를 포함

는 주어진 문자열 는 특정 부분 포함되어 있는지 여부를 확인하는 문자열 같이 IndexOf 메서드를 사용하여 텍스트의 또는 아닙니다. 대부분의 상황에서이 방법이 이면 충분하지만 간단한 일치가 충분하지 않은 경우 시나리오가 발생할 수 있습니다.정규 표현식을 사용하면 찾고있는 대답이 일 수 있습니다.

jQuery는 정규식에 대한 지원을 제공하지 않습니다. 나는 그들이 모든 것에 대한 대답이 이 아니므로 당신이 현명하게 그것을 사용해야한다는 것에 분명히 동의 할 것입니다. 그러나 에서 사용하려면 적절한 이유가 있습니다. 다행히도 jQuery를 정규식 익스프레션 기반 컨텐츠 필터로 확장하는 것은 그리 어렵지 않습니다.

jQuery.extend(
    jQuery.expr[':'], { 
     regex: function(a, i, m, r) { 
      var r = new RegExp(m[3], 'i'); 
      return r.test(jQuery(a).text()); 
     } 
    } 
); 

믿거 나 말거나지만, 몇 줄의 코드는 위의 당신이 에 필요한 모든 정규 표현식 텍스트가 일치에 대한 지원과 jQuery를 확장하는 것입니다. 무엇이 위의 regex라는 새로운 필터를 정의하는 것입니다. 필터를 호출 할 때마다 필터의 매개 변수로 전달 된 값 을 사용하여 새 정규식을 만듭니다. 또한 표현식 은 대소 문자를 구분하지 않는 일치 항목을 사용합니다 (RegExp 생성자의 두 번째 매개 변수에서 을 삭제하여 제거 할 수 있음). 현재 DOM 개체의 텍스트가 표현식과 일치하면 개체는 에 추가됩니다. 다음과 같이

당신은 정규식 필터를 사용할 수 있습니다 :

$("p:regex('[A-Z0-9._%+-][email protected][A-Z0-9.-]+\.[A-Z]{2,4}')") 

위의 예제는 전자 메일을 주소를 포함하는 모든 단락을 반환합니다. (저자 말했듯 jQuery ships with quite a few filters: http://api.jquery.com/category/selectors/)

이러한 두 가지 방법은

:contains:regex 필터 jQuery를 연장한다. 원하는 경우

via

또한 :regex 필터 plugin 있습니다.

관련 문제