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

时间:2011-09-27 14:47:33

标签: javascript jquery jquery-selectors

如标题中所述,我想找到像: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>

4 个答案:

答案 0 :(得分:35)

您可以使用filter

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

编辑:就像演示说明一样,如果你碰巧知道你正在搜索的内容的性质(例如,节点是#id的直接子节点),那么使用它会更有效率像.children()而不是.find('*')


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

答案 1 :(得分:7)

jmar777的回答帮助我完成了这个问题,但是为了避免搜索我开始使用的所有内容:contains选择器并过滤其结果

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

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

答案 2 :(得分:0)

你可以尝试编写一个正则表达式并搜索它:Regular expression field validation in jQuery

答案 3 :(得分:0)

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

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