【问题标题】:span:contains() finds to many numbersspan:contains() 找到许多数字
【发布时间】:2013-03-02 15:28:49
【问题描述】:

这段代码:

if( $('span:contains("'+user_choice+'")').length == 0 )

使用contain 选择器查找包含用户输入的<span>。用户输入user_choice是一个数字,如@9​​87654325@或2331等。

但代码无法找到特定的<span>,因为例如用户输入user_choice = 1 将找到12131 以及包含 1 的所有数字。我只需要找到具体的<span>正是1

contain 选择器为此目的是否错误,我该如何纠正它以使其正常工作?

【问题讨论】:

    标签: jquery selector contain


    【解决方案1】:

    是的,contains 选择器不符合您的目的。顾名思义,它匹配包含指定文本作为子字符串的任何元素,而不仅仅是那些完全匹配的元素。

    你可以试试.filter():

    var matchingElements = $('span').filter(function(index) {
        return $(this).text() === user_choice;
    });
    if(matchingElements.length === 0) {
        ...
    }
    

    【讨论】:

    • 这些年来一直在使用 jQuery,我不敢相信我从来没有遇到过 .filter() (尽管从 1.0 版开始)。这比我提供的解决方案要好得多!
    【解决方案2】:

    您可以使用filter 方法。

    var len = $('span').filter(function(){
         return $(this).text() == user_choice;
    }).length;
    

    【讨论】:

      【解决方案3】:

      这样的事情怎么样?

      $('span').each(function(){
        if ($(this).html() == user_choice){
         return true;
        }
       });
      

      【讨论】:

      • 它会返回类似1==1,最好使用 text() 方法
      • 来自api.jquery.com/html:“获取匹配元素集中第一个元素的HTML内容”。所以 html() 只会返回内容而不是标签本身
      • 是的。我的错。 outerHTML 将给出标签。
      【解决方案4】:

      尝试每个函数,它会比较“span”的所有标签

      $('span').each(function(){
        if ($(this).text() == "my_choosen_var"){
          return true;
        }
      });
      

      【讨论】:

      • @Ravi 不知道你在说什么,.html() 方法返回innerHTML,所以如果元素的outerHTML<span>1</span>,它只会是1 .
      • 但是,从传递给.each() 的函数返回true 并不会改变匹配元素的集合。
      • @AnthonyGrist 我的错。有点困惑。
      猜你喜欢
      • 2018-06-01
      • 2018-06-29
      • 1970-01-01
      • 1970-01-01
      • 2017-02-05
      • 2016-09-12
      • 1970-01-01
      • 2019-10-26
      相关资源
      最近更新 更多