【问题标题】:jQuery :contains(), but to match an exact stringjQuery :contains(),但要匹配一个精确的字符串
【发布时间】:2011-11-26 03:11:45
【问题描述】:

正如标题中所说,我想找到类似:contains() 的东西,但要匹配一个精确的字符串。换句话说,它不应该是部分匹配。例如在这种情况下:

<div id="id">
   <p>John</p>
   <p>Johny</p>
</div>

$("#id:contains('John')") 将匹配 JohnJohny,而我只想匹配 John

提前致谢。

编辑: ES2015 单线解决方案,以防有人寻找:

const nodes = [...document.querySelectorAll('#id > *')].filter(node => node.textContent === 'John');

console.log(nodes);
/* Output console formatting */
.as-console-wrapper { top: 0; }
.as-console { height: 100%; }
<div id="id">
  <p>John</p>
  <p>Johny</p>
</div>

【问题讨论】:

标签: javascript jquery jquery-selectors


【解决方案1】:

简单的方法是使用伪函数“通过精确匹配选择元素”。

解决方案 Select element by exact match of its content

【讨论】:

    【解决方案2】:

    jmar777 的回答帮助我解决了这个问题,但为了避免搜索我从 :contains 选择器开始的所有内容并过滤了它的结果

    var $results = $('#id p:contains("John")').filter(function() {
        return $(this).text() === 'John';
    });
    

    这是一个更新的小提琴http://jsfiddle.net/Akuyq/34/

    【讨论】:

    • 刚刚注意到这个答案发布在这里。以防万一其他人遇到这种情况,添加:contains() 检查实际上不太有效。在内部,:contains() 必须遍历所有元素并对"John" 执行正则表达式比较。然后,我们必须在上面使用filter() 遍历通过检查的所有内容。基本上,这个版本的最坏情况复杂度是O(2n),而我的每个情况都只是O(n)(是的,我意识到那种滥用Big O Notation,那里......)。
    【解决方案3】:

    您可以为此使用filter

    $('#id').find('*').filter(function() {
        return $(this).text() === 'John';
    });
    

    编辑:就像性能说明一样,如果您碰巧了解更多关于您正在搜索的内容的性质(例如,节点是 #id 的直接子节点),使用类似的东西会更有效.children() 而不是 .find('*')


    这里有一个 jsfiddle,如果你想看到它的实际效果:http://jsfiddle.net/Akuyq/

    【讨论】:

      【解决方案4】:

      您可以尝试编写正则表达式并从中搜索:Regular expression field validation in jQuery

      【讨论】:

      • 它对我来说不是很好。除了我还需要找到解决方案如何在#id 的孩子之间搜索字符串John
      猜你喜欢
      • 2021-10-18
      • 1970-01-01
      • 2022-11-26
      • 2018-10-27
      相关资源
      最近更新 更多