2013-03-14 4 views
1

이 코드를 찾습니다. 사용자 입력 user_choice1 또는 23 또는 31

같은 수 있지만 코드는 예컨대 때문에, 특정 <span>을 찾는데 실패 사용자 입력 user_choice = 112131이며 모두 의 숫자는1입니다. 특정 <span>정확히1 인 것을 찾아야합니다.

이 목적으로 contain 선택기가 잘못되었지만 제대로 작동하려면 어떻게 수정해야합니까?

답변

3

예, contains 선택기가 잘못되었습니다. 이름에서 알 수 있듯이 정확히 일치하는 요소 만이 아니라 부분 텍스트로 지정된 텍스트가 포함 된 요소와 일치합니다.

당신은 .filter()을 사용하여 시도 할 수 :

var matchingElements = $('span').filter(function(index) { 
    return $(this).text() === user_choice; 
}); 
if(matchingElements.length === 0) { 
    ... 
} 
+0

+1을'==='+1하고 OP를 하나 더 멋진 기능으로 도입했습니다 –

+0

이 모든 해는 jQuery를 사용하여 저는 .filter() (버전 1.0 이후 임에도 불구하고)를 보지 못했다고는 믿을 수 없습니다. 이것은 내가 제공 한 것보다 훨씬 나은 해결책입니다! –

1

어때?

$('span').each(function(){ 
    if ($(this).html() == user_choice){ 
    return true; 
    } 
}); 
+0

그것이 1 == 1과 같이 반환, 그것은 "범위"의 모든 태그를 비교 각 기능을 시도, 더 나은 http://api.jquery.com/html/의 text() 메소드 –

+0

을 사용하십시오 : "일치하는 요소 세트의 첫 번째 요소의 HTML 내용 가져 오기". 그래서 html()은 태그 자체가 아닌 내용을 반환합니다. –

+0

예. 내 잘못이야. outerHTML이 태그를 제공합니다. –

3

filter 방법을 사용할 수 있습니다.

var len = $('span').filter(function(){ 
    return $(this).text() == user_choice; 
}).length; 
1

$('span').each(function(){ 
    if ($(this).text() == "my_choosen_var"){ 
    return true; 
    } 
}); 
+0

@Ravi'.html()'메소드는'innerHTML'을 반환하므로, 요소의'outerHTML'가''이면'1'이됩니다. –

+0

그러나 .each()에 전달 된 함수에서'true'를 반환해도 일치하는 요소 집합을 변경하는 데는 아무런 변화가 없다는 문제가 있습니다. –

+0

@AnthonyGrist 내 잘못입니다. 릴 혼란스러워. –