jQuery :contains(),但要匹配一个精确的字符串

IT技术 javascript jquery jquery-selectors
2021-03-10 03:25:42

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

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

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

提前致谢。

编辑: ES2015 单行解决方案,以防万一有人寻找它:

4个回答

您可以filter为此使用

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

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


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

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,那里......)。
2021-05-12 03:25:42

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

它对我来说不太好。除了我还需要找到如何John#id.
2021-05-19 03:25:42

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

解决方案 通过其内容的完全匹配来选择元素