如何过滤从jquery .each()函数接收的锚标记

时间:2011-10-03 08:17:55

标签: jquery filter anchor each

我有一个包含分配锚标签的div。

其中一些人有一个img作为标签的一面。

我需要获得所有带有常规文本的“a”,而不是图片标记或任何其他HTML标记。

如何用jquery完成。

为了得到它们,我只是这样做:

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

但是我如何使用.text()函数或其他任何东西来过滤它们。

谢谢

4 个答案:

答案 0 :(得分: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

答案 1 :(得分:2)

您可以使用.filter方法过滤匹配的元素集,使其仅包含带有文本的元素:

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

这是working example

如果$(this).text()元素中存在任何文本节点,则上述问题可能是true将评估为a的事实。这包括一个空的空间。为防止这种情况,您可能需要修剪文本:

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

答案 2 :(得分:1)

试试这个简单易用

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

答案 3 :(得分:1)

一个想法:在每个区块中以这种方式进行检查:

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

});