【问题标题】:Is there any selector to do a perfect match against text?是否有任何选择器可以与文本完美匹配?
【发布时间】:2012-05-30 17:33:23
【问题描述】:

在 jQuery 上,我正在寻找与 :contains 类似的选择器,但我需要对元素文本进行完美匹配。有吗?

<div>1</div>
<div>12</div>
<div>13</div>
<div>135</div>

所以如果我寻找text = 1,我只会得到第一个div

【问题讨论】:

  • 您是在寻找像 div 这样的元素的 innerHTML,还是像输入字段这样的元素的值?

标签: jquery


【解决方案1】:

你可以做一个:

$.extend($.expr[":"], {
    exactly: function( element, index, details, collection ){
        return $(element).text() === details[3];
    }
});

$("div:exactly(Foo)").addClass("red");
$("div:exactly(230)").addClass("blu");

小提琴:http://jsfiddle.net/jonathansampson/YUQLF/

【讨论】:

  • 哇哦……太棒了。
  • 出于好奇,您能否指出这种方法的文档?这是我以前从未见过的(据我所知)。
  • @DavidThomas 和 j08691 我要写点东西 - 我会在有空时通知你。
  • @JonathanSampson - 太棒了,谢谢。也许您应该在这里发布一个问题,例如“如何创建自定义 jQuery 过滤器?”并发布您的博客文章作为答案。我会 +1 ;)
【解决方案2】:

可以这样做:

var str = "whatever";

$(".elements").filter(function() {
    return $(this).text() == str;
});

【讨论】:

  • return $(this).text() == string 会不会更合适,因为innerHTML 会查看 HTML 结构以及文本内容?
  • @DavidThomas 是的。我认为你是对的。对于一般解决方案,它更好。谢谢!
  • 虽然答案有效,但我真的很惊讶这被 Jonathan Sampson 接受了。 =/
  • 对于我的具体情况,这是最好的解决方案。我同意按照 Jonathan Sampson 的建议创建一个选择器以便在不同的地方使用它可能值得。
【解决方案3】:
var search = '1';
$('div').filter(function() {
  return $(this).text()  == search;
}).css('background','#f00');

DEMO

【讨论】:

  • 如果文本是 12 并且我寻找 1 包含将匹配,除非我遗漏了什么。这不是我要找的,我需要做一个完美的匹配。
  • @TimmyO'Tool 检查演示,它正在做你想做的事情
  • @thecodeparadox:当时我说你的答案不是我需要的,你有一个完全不同的代码。 Vision 已经发布了这个解决方案。还是谢谢!
猜你喜欢
  • 1970-01-01
  • 2023-03-29
  • 2012-02-12
  • 1970-01-01
  • 2020-12-02
  • 1970-01-01
  • 2011-10-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多