如何通过 jQuery 将 :contains(text) 与任何文本一起使用

发布于 2024-11-04 09:55:39 字数 326 浏览 0 评论 0原文

使用 jQuery,可以使用:

$(":contains(hello)")

它将返回包含文本“hello”的任何匹配元素。

我希望能够匹配任何文本,尤其是“你好:)”。

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

如何使用 jQuery 查找包含“hello :)”的元素?

With jQuery, one can use:

$(":contains(hello)")

It will return any matching element that contains the text "hello".

I want to be able to match any text, especially "hello :)".

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

How do I find elements that contains "hello :)" with jQuery ?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

梦里梦着梦中梦 2024-11-11 09:55:39

请参阅此答案了解具体方法。

它基本上涉及 .filter 来绕过 已知的 :contains bug

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

实时示例

请注意,即使只有一个元素包含该文本,对其结果执行 .length 也可能会得到一个大于 1 的值,因为该元素的父元素也会匹配。

See this answer for how.

It basically involves .filter to get around a known :contains bug:

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

Live example.

Note that performing .length on the result of this may give you a value greater than 1 even if only one element contains that text, because the element's parents will also match.

梦纸 2024-11-11 09:55:39

这似乎是一个未解决的错误: http://bugs.jquery.com/ticket/5482

Jakkob 的声明如下:

我还发现错误仅出现
如果括号位于最末尾
包含表达式。

This seems to be an open bug: http://bugs.jquery.com/ticket/5482

And there is this statement of jakkob:

I also found that the error comes only
if the bracket is at the very end of
the contains-expression.

枕头说它不想醒 2024-11-11 09:55:39

来自 jQuery:

如果您想使用任何元字符(例如 !"#$%&'()*+,./:;<=>?@[]^`{|}~ )作为名称的文字部分,您必须使用两个反斜杠转义字符:\\

所以请尝试此操作

$(":contains('hello \\:\\)')")

from jQuery:

If you wish to use any of the meta-characters ( such as !"#$%&'()*+,./:;<=>?@[]^`{|}~ ) as a literal part of a name, you must escape the character with two backslashes: \\

so try this

$(":contains('hello \\:\\)')")
说不完的你爱 2024-11-11 09:55:39

快速代码:

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() 接受正则表达式(这意味着您需要转义正则表达式需要转义的任何内容)

Quick code:

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

This way you can do:

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

Note: contains() accept a regular expression (meaning you need to escape whatever needs to be escaped for a regexp)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文