Как использовать: содержит (текст) с любым текстом с помощью jQuery - PullRequest
5 голосов
/ 30 апреля 2011

С помощью jQuery можно использовать:

$(":contains(hello)")

Будет возвращен любой соответствующий элемент, содержащий текст «привет».

Я хочу соответствовать любому тексту, особенно "hello :)".

$(":contains(hello :))") // Doesn't work
$(":contains('hello :)')") // Doesn't work
$(":contains('hello :\)')") // Doesn't work

Как найти элементы, содержащие "hello :)" с помощью jQuery?

Ответы [ 4 ]

4 голосов
/ 30 апреля 2011

См. этот ответ о том, как.

Это в основном включает .filter, чтобы обойти известную :contains ошибку :

$('#demo').filter(function(i, el) {
    return !!$(el).text().match(/hello :\)/);
});

Live пример .

Обратите внимание, что выполнение .length в результате этого может дать вам значение больше 1, даже если только один элемент содержит этот текстпотому что родители элемента также будут совпадать.

1 голос
/ 30 апреля 2011

Это, кажется, открытая ошибка: http://bugs.jquery.com/ticket/5482

И есть это утверждение из jakkob:

Я также обнаружил, что ошибка возникаеттолько если скобка находится в самом конце содержимого-выражения.

0 голосов
/ 30 апреля 2011

Быстрый код:

jQuery.fn.contains = function(re) {
  return this.filter(function(i, el) {
    return !$(el).text().match(RegExp(re));
  });
};

Таким образом, вы можете сделать:

$("*").contains(":\\)") // returns all elements in the page that contains ':)'

Примечание: contains () принимает регулярное выражение (то есть вам нужно экранировать все, что нужно экранироватьдля регулярного выражения)

0 голосов
/ 30 апреля 2011

из jQuery:

Если вы хотите использовать любой из мета-символов (например,! "# $% & '() * +,. / :; <=>? @ [] ^` {|} ~) В качестве литерала часть имени, вы должны экранировать персонажа двумя обратными слешами: \\

так что попробуйте

$(":contains('hello \\:\\)')")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...