我有一个包含分配锚标签的div。
其中一些人有一个img作为标签的一面。
我需要获得所有带有常规文本的“a”,而不是图片标记或任何其他HTML标记。
如何用jquery完成。
为了得到它们,我只是这样做:
$(element).find('a').each(function () {
...........
});
但是我如何使用.text()
函数或其他任何东西来过滤它们。
谢谢
答案 0 :(得分:4)
$(element).find('a').filter(':not(:has(*))').each(function() {
});
这就是“查找a
个元素,然后将该选择过滤到那些没有子元素的元素”。 :has(*)
表示“选择包含任何子元素的元素”,因此:not(:has(*))
表示“选择没有任何子元素的元素”。
您可以组合两个选择器:
$(element).find('a:not(:has(*))').each...
但是,这意味着querySelectorAll
不起作用,因此选择速度会慢得多。
答案 1 :(得分:2)
您可以使用.filter
方法过滤匹配的元素集,使其仅包含带有文本的元素:
$("#example").find('a').filter(function () {
return $(this).text();
}).each(function() {
//Do stuff
});
如果$(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())
{
...........
}
});