2011-10-03 74 views
2

我有一個div,其中包含錨定標記的分配。如何篩選從jquery .each()函數接收到的錨標記

它們中的一些在標籤的內側有一個img。

我需要得到所有在其中具有常規文本的「a」,而不是圖像標籤或任何其他HTML標籤。

這怎麼可以用jQuery完成。

把他們都弄到我只是做:

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

但我如何使用.text()功能或任何其他人的東西過濾。

謝謝

回答

4

您可以使用nothas選擇

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

}); 

,說:「找a元素,然後篩選選擇到那些沒有子元素」。 :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

上面的一個小問題可能是$(this).text()將評估爲true如果在a元素中存在任何文本節點。這包括一個空的空間。爲了防止這種情況,你可能要修剪的文字:

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

試試這個簡單和容易

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

一個想法:在各區塊進行檢查是這樣的:

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

});