2011-10-03 4 views
2

앵커 태그를 할당 한 div가 있습니다.jquery .each() 함수에서받은 앵커 태그를 필터링하는 방법

일부 태그에는 img 태그가 있습니다.

이미지 태그 나 다른 HTML 태그가 아닌 일반 텍스트가있는 모든 "a"를 가져와야합니다.

jquery로 어떻게 할 수 있습니까?

$(element).find('a').each(function() { 
........... 
}); 

을하지만 난 .text() 기능 또는 다른 어떤 일을 사용하여 필터링 어떻게 :

난 그냥 이렇게 그들 모두를 얻으려면.

답변

4

당신은 "a 요소를 찾아 다음 아래로 자식 요소를 가지고 있지 않는 사람들에게 그 선택을 필터링"라는 nothas 선택기

$(element).find('a').filter(':not(:has(*))').each(function() { 

}); 

을 사용할 수 있습니다 감사합니다. :has(*)은 "자식 요소가있는 요소 선택"을 의미하므로 :not(:has(*))은 "자식 요소가없는 요소 선택"을 의미합니다.


당신은 두 개의 선택기를 결합 할 수 있습니다 :

$(element).find('a:not(:has(*))').each... 

그러나이 선택이 상당히 느려질 수 있도록 querySelectorAll가 작동되지 않습니다.

Live example at jsbin

2

당신은 텍스트 만을 포함하는 요소의 일치 세트를 필터링 할 .filter 방법을 사용할 수 있습니다 :

$("#example").find('a').filter(function() { 
    return $(this).text(); 
}).each(function() { 
    //Do stuff 
}); 

가 여기 working example입니다.

위의 약간의 문제는 a 요소 내에 텍스트 노드가있는 경우 이 true으로 평가된다는 사실입니다. 여기에는 하나의 빈 공간이 포함됩니다. 그것을 방지하기 위해, 당신은 텍스트 다듬을 수 있습니다

$.trim($(this).text()); 
1

간단하고 쉬운 시도를

$(element).find('a').not(":has('img')").each(function() { 
........... 
}); 
1

아이디어 :

$(element).find('a').each(function() { 
if($(this).text() == $(this).html()) 
{ 
........... 
} 

}); 
: 각 블록은 확인이 길을에
관련 문제