it-roy-ru.com

jQuery: содержит (), но соответствует точной строке

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

25
Przemek

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

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

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


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

34
jmar777

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

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

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

7
PaulParton

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

0
Steve Sloka

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

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

0
Mehmet Hanoğlu