【发布时间】:2011-10-03 08:17:55
【问题描述】:
我有一个包含分配锚标签的 div。
其中一些有一个 img 作为标签的内侧。
我需要获取所有包含常规文本的“a”,而不是图像标记或任何其他 HTML 标记。
jquery 如何做到这一点。
为了得到它们,我只是这样做:
$(element).find('a').each(function () {
...........
});
但是我如何使用.text() 函数或其他任何东西过滤它们。
谢谢
【问题讨论】:
我有一个包含分配锚标签的 div。
其中一些有一个 img 作为标签的内侧。
我需要获取所有包含常规文本的“a”,而不是图像标记或任何其他 HTML 标记。
jquery 如何做到这一点。
为了得到它们,我只是这样做:
$(element).find('a').each(function () {
...........
});
但是我如何使用.text() 函数或其他任何东西过滤它们。
谢谢
【问题讨论】:
$(element).find('a').filter(':not(:has(*))').each(function() {
});
这就是说“找到a 元素,然后将该选择过滤到没有子元素的那些”。 :has(*) 表示“选择具有任何子元素的元素”,因此:not(:has(*)) 表示“选择没有任何子元素的元素”。
你可以组合两个选择器:
$(element).find('a:not(:has(*))').each...
但是,这意味着querySelectorAll 将不起作用,因此选择会相当慢。
【讨论】:
您可以使用.filter 方法过滤匹配的元素集以仅包含带有文本的元素:
$("#example").find('a').filter(function () {
return $(this).text();
}).each(function() {
//Do stuff
});
上面的一个小问题可能是如果a 元素中存在任何文本节点,$(this).text() 将评估为true。这包括一个空白空间。为防止这种情况,您可能需要修剪文本:
$.trim($(this).text());
【讨论】:
试试这个简单易行
$(element).find('a').not(":has('img')").each(function () {
...........
});
【讨论】:
一个想法:在每个块中以这种方式进行检查:
$(element).find('a').each(function () {
if($(this).text() == $(this).html())
{
...........
}
});
【讨论】: