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>
Ответы
Ответ 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/
Ответ 3
Вы можете попробовать написать регулярное выражение и выполнить поиск: Проверка правильности выражения в jQuery
Ответ 4
Простым способом является "выбор элемента путем точного совпадения" с использованием псевдофункции.
Решение
Выбрать элемент по точному соответствию его содержимому