【问题标题】:how to filter anchor tags that were received from the jquery .each() function如何过滤从 jquery .each() 函数接收到的锚标记
【发布时间】:2011-10-03 08:17:55
【问题描述】:

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

其中一些有一个 img 作为标签的内侧。

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

jquery 如何做到这一点。

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

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

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

谢谢

【问题讨论】:

    标签: jquery filter anchor each


    【解决方案1】:

    您可以使用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

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

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

      【讨论】:

        【解决方案3】:

        试试这个简单易行

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

        【讨论】:

          【解决方案4】:

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

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

          【讨论】:

            猜你喜欢
            • 2013-09-28
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2020-10-13
            • 2015-08-14
            • 1970-01-01
            • 1970-01-01
            • 2017-04-12
            相关资源
            最近更新 更多