jQuery: содержит (), но соответствует точной строке - PullRequest
27 голосов
/ 27 сентября 2011

Как сказано в заголовке, я хотел бы найти что-то вроде :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>

Ответы [ 4 ]

35 голосов
/ 27 сентября 2011

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

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

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

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

8 голосов
/ 05 июня 2014

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

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

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

0 голосов
/ 25 августа 2017

Простой способ - «выбрать элемент по точному совпадению» с использованием псевдо-функции.

Решение Выбор элемента по точному совпадению его содержимого

0 голосов
/ 27 сентября 2011

Вы можете попробовать написать регулярное выражение и выполнить поиск по нему: Проверка поля регулярного выражения в jQuery

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...