【问题标题】:How to select all anchor tags with specific text如何选择具有特定文本的所有锚标记
【发布时间】:2011-01-27 15:56:21
【问题描述】:

给定多个锚标签:

<a class="myclass" href="...">My Text</a>

如何选择与类匹配并带有一些特定文本的锚点。例如选择所有具有类的锚点:'myclass' 和文本:'My Text'

【问题讨论】:

    标签: jquery html css-selectors


    【解决方案1】:
    $("a.myclass:contains('My Text')")
    

    【讨论】:

    • 谢谢大卫。如何进行完全匹配比较而不是包含。我只想要完全匹配的元素。
    • 我只会在链接和书签之间添加区别:​$('a.myclass[href]:contains("My Text")')​​​​
    • @geoff:没有内置的方法可以得到完全匹配。您可以使用 .each 函数来遍历它们,也可以编写自己的 jQuery 选择器。 Eric Martin 为精确匹配写了一篇很好的文章。你可以在这里找到它:ericmmartin.com/creating-a-custom-jquery-selector
    • 正是我所需要的。谢谢。
    • 连一个类都没有可以识别怎么办?
    【解决方案2】:

    您可以创建一个类似于 :contains 的自定义选择器以进行精确匹配:

    $.expr[':'].containsexactly = function(obj, index, meta, stack) 
    {  
        return $(obj).text() === meta[3];
    }; 
    
    var myAs = $("a.myclass:containsexactly('My Text')");
    

    【讨论】:

      【解决方案3】:

      如果您只是在锚的文本包含特定字符串时感到困扰,请使用@Dave Morton 的解决方案。但是,如果您想 完全 匹配特定的字符串,我会建议这样:

      $.fn.textEquals = function(txt) {
          return $(this).text() == txt;
      }
      
      $(document).ready(function() {
          console.log($("a").textEquals("Hello"));
          console.log($("a").textEquals("Hefllo"))
      });
      
      <a href="blah">Hello</a>
      

      略微改进的版本(带有第二个 trim 参数):

      $.fn.textEquals = function(txt,trim) {
          var text = (trim) ? $.trim($(this).text()) : $(this).text();
          return text == txt;
      }
      
      $(document).ready(function() {
          console.log($("a.myclass").textEquals("Hello")); // true
          console.log($("a.anotherClass").textEquals("Foo", true)); // true
          console.log($("a.anotherClass").textEquals("Foo")); // false
      });
      
      <a class="myclass" href="blah">Hello</a>
      <a class="anotherClass" href="blah">   Foo</a>
      

      【讨论】:

        【解决方案4】:

        首先,选择所有包含“我的文本”的标签。然后对于每个完全匹配,如果它符合条件,请执行您想做的任何事情。

        $(document).ready(function () {
            $("a:contains('My Text')").each(function () {
                $store = $(this).text();
        
                if ($store == 'My Text') {
                    //do Anything.....
                }
            });
        });
        

        【讨论】:

        • 首先选择所有包含“我的文本”的标签,然后为完全匹配将其置于 if 条件中。然后做你想做的事。
        • 将此添加到您的答案中
        【解决方案5】:

        如果您不知道所需对象的类别,而只想查看链接文本,则可以使用

        $(".myClass:contains('My Text')")
        

        如果您甚至不知道它是哪个元素(例如 a、p、链接...),您可以使用

        $(":contains('My Text')")
        

        (将:之前的部分留空。)

        我必须在这里补充一点,它会显示从&lt;html&gt;-Tag 开始的所有元素到所需的元素。我可以提供的一种解决方案是在其中添加.last(),但这仅在只有一个元素要查找时才有效。也许sbdy。在这里知道更好的解决方案。

        实际上,这应该是对已接受答案的补充,尤其是对@Amalgovinus 问题的补充。

        【讨论】:

          【解决方案6】:

          我认为这应该适用于完全匹配的事情..

          $("a.myclass").html() == "your text"
          

          【讨论】:

          • 不起作用。 html() 仅适用于匹配元素集中的第一个元素 (api.jquery.com/html)。您需要控制流或迭代来遍历每个锚点,例如 each()
          猜你喜欢
          • 2018-07-03
          • 1970-01-01
          • 2015-06-11
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多