Хорошо, мне интересно, есть ли способ сделать :contains()
селектор jQuery для выбора элементов только с той строкой, которая набрана в
например -
<p>hello</p>
<p>hello world</p>
$('p:contains("hello")').css('font-weight', 'bold');
Селектор выберет оба p
элемента и выделит их жирным шрифтом, но я хочу, чтобы он выбирал только первый.
jquery
jquery-selectors
юлианский
источник
источник
:contains
селектор своим собственным кодом, но я не думаю, что вы это имели в виду?Ответы:
Нет, здесь нет селектора jQuery (или CSS), который бы это делал.
Вы можете легко использовать
filter
:Это не селектор , но он делает свою работу. :-)
Если вы хотите обработать пробел до или после «привет», вы можете добавить
$.trim
туда:Для недоношенных оптимизаторов, если вам все равно, что они не совпадают
<p><span>hello</span></p>
и не похожи, вы можете избежать вызовов$
иtext
используяinnerHTML
напрямую:... но у вас должно быть много параграфов, чтобы иметь значение, так много, что у вас, вероятно, возникнут другие проблемы в первую очередь. :-)
источник
$.trim
использовать любой проблеск перед сравнением.==
(== 2
), либо поместить число в строку (=== "2"
), потому что значение, которое вы получаете,text()
илиinnerHTML
всегда является строкой. Если вы сравнивали со строкой, не имеет значения, используете ли вы==
или===
.:contains
это более сложно, но не реализовал селектор для точного соответствия текста. = {Попробуйте добавить расширенную псевдо-функцию:
Тогда вы можете сделать:
источник
$.expr[':'].textEquals = $.expr[':'].textEquals || $.expr.createPseudo(function(arg) {
Вы можете использовать функцию filter () jQuery для достижения этой цели.
источник
Так что ответ Аманду в основном работает. Однако, используя его в дикой природе, я столкнулся с некоторыми проблемами, когда вещи, которые я ожидал найти, не были найдены. Это было потому, что иногда есть случайные пробелы вокруг текста элемента. Я уверен, что если вы ищете «Hello World», вы все равно хотите, чтобы оно совпадало с «Hello World» или даже «Hello World \ n». Таким образом, я просто добавил метод «trim ()» в функцию, которая удаляет окружающие пробелы, и он начал работать лучше.
В частности ...
Кроме того, обратите внимание, этот ответ очень похож на Выбор ссылки по тексту (точное совпадение)
И вторичная заметка ...
trim
удаляет только пробелы до и после искомого текста. Он не удаляет пробелы в середине слов. Я считаю, что это желательное поведение, но вы можете изменить это, если хотите.источник
Я нашел способ, который работает для меня. Это не на 100% точно, но исключает все строки, которые содержат больше, чем просто слово, которое я ищу, потому что я проверяю строку, не содержащую также отдельных пробелов. Кстати, вам не нужны эти "". JQuery знает, что вы ищете строку. Убедитесь, что у вас есть только один пробел в части: contains (), иначе он не будет работать.
И да, я знаю, это не сработает, если у вас есть такие вещи, как
<p>helloworld</p>
источник
Как и TJ Crowder, указанный выше, функция фильтра творит чудеса. Это не работает для меня в моем конкретном случае. Мне нужно было искать несколько таблиц и их соответствующие теги td внутри div (в этом случае диалоговое окно jQuery).
Надеюсь это кому-нибудь пригодится!
источник
Однострочник, который работает с альтернативными библиотеками jQuery:
И это эквивалентно
a:contains("pattern")
селектору jQuery :источник
.First () поможет здесь
источник