Подтвердить что ты не робот

JQuery: contains(), но для соответствия точной строке

Как сказано в названии, я хотел бы найти что-то вроде :contains(), но для соответствия точной строке. Другими словами, это не должно быть частичным совпадением. Например, в этом случае:

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

$("#id:contains('John')") будет соответствовать как John, так и Johny, в то время как я хотел бы соответствовать только John.

Спасибо заранее.

EDIT: 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>
4b9b3361

Ответ 1

Вы можете использовать filter для этого:

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

Изменить. Как примечание о производительности, если вам больше известно о характере того, что вы ищете (например, что узлы являются непосредственными дочерними элементами #id), было бы более эффективно использовать что-то вроде .children() вместо .find('*').


Здесь это jsfiddle, если вы хотите увидеть его в действии: http://jsfiddle.net/Akuyq/

Ответ 2

Ответ на

jmar777 помог мне решить эту проблему, но чтобы не искать все, что я начал с: содержит селектор и отфильтровывал его результаты

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

Вот обновленная скрипка http://jsfiddle.net/Akuyq/34/