如标题中所述,我想找到像:contains()
这样的东西,但要匹配一个确切的字符串。换句话说,它不应该是部分匹配。例如,在这种情况下:
<div id="id">
<p>John</p>
<p>Johny</p>
</div>
$("#id:contains('John')")
会匹配John
和Johny
,而我只想匹配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>
答案 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)
简单的方法是使用伪函数“按精确匹配选择元素”。