所有正确的精确匹配选择元素,我不知道是否有一种方法可以使:contains()
jQuery的选择器选择与仅是在其内容
输入例如字符串元素 -
<p>hello</p>
<p>hello world</p>
$('p:contains("hello")').css('font-weight', 'bold');
选择器将选择两个p
元素并使它们变为粗体,但我希望它只选择第一个。
所有正确的精确匹配选择元素,我不知道是否有一种方法可以使:contains()
jQuery的选择器选择与仅是在其内容
输入例如字符串元素 -
<p>hello</p>
<p>hello world</p>
$('p:contains("hello")').css('font-weight', 'bold');
选择器将选择两个p
元素并使它们变为粗体,但我希望它只选择第一个。
不,没有这样做的jQuery(或CSS)选择器。
你可以很容易地使用filter
:
$("p").filter(function() {
return $(this).text() === "hello";
}).css("font-weight", "bold");
这不是一个选择,但它的工作。 :-)
如果你想之前或之后办理的空白“你好”,你可以在那里扔一个$.trim
:
return $.trim($(this).text()) === "hello";
对于过早的优化在那里,如果你不关心它不匹配<p><span>hello</span></p>
和类似的,你可以直接使用innerHTML
避免$
和text
来电:
return this.innerHTML === "hello";
...但你必须有一个很多它的重要段落,很多,你可能会首先遇到其他问题。 :-)
可能还想''.trim'它在进行比较之前有任何空白空白。 – Blazemonger 2013-03-12 14:43:54
出于某种原因,我不得不使用“==”这个工作,而不是“===”。 – Stephan 2015-01-22 05:36:44
@Stephan:如果你正在比较一个数字,你必须使用==(== 2)或者把数字放在一个字符串中(===“2”'),因为你从text()或innerHTML获得的值总是一个字符串。如果你使用字符串进行比较,那么使用'=='还是'==='无关紧要。 – 2015-01-22 07:38:27
你可以使用jQuery的filter()函数来实现这一点。
$("p").filter(function() {
// Matches exact string
return $(this).text() === "Hello World";
}).css("font-weight", "bold");
的。首先()将在这里帮助
$('p:contains("hello")').first().css('font-weight', 'bold');
当然......在这个特定的情况下。如果订单在开发时间不知道怎么办? – BLSully 2013-03-12 14:44:59
帮助我实际上欢呼 – 2016-03-06 23:20:32
尝试添加一个扩展伪功能:
$.expr[':'].textEquals = $.expr.createPseudo(function(arg) {
return function(elem) {
return $(elem).text().match("^" + arg + "$");
};
});
然后,你可以这样做:
$('p:textEquals("Hello World")');
伟大的解决方案:小额外:确保您不覆盖现有的expr,我会这样做:''。$ .expr [':']。textEquals = $ .expr [':' ] .textEquals || $ .expr.createPseudo(function(arg){''' – 2018-03-08 12:46:06
所以Amandu的答案主要是作品。然而,在野外使用它,我遇到了一些问题,我预计会发现的事情没有找到。这是因为有时在元素的文本周围会出现随机的空白区域。我相信,如果你正在寻找“Hello World”,你仍然希望它匹配“Hello World”,甚至是“Hello World \ n”。因此,我只是将“trim()”方法添加到该函数中,该函数移除了周围的空白,并且它开始工作得更好。
具体...
$.expr[':'].textEquals = function(el, i, m) {
var searchText = m[3];
var match = $(el).text().trim().match("^" + searchText + "$")
return match && match.length > 0;
}
此外,请注意,这个答案是非常相似 Select link by text (exact match)
和二级注...trim
仅在前后删除空白搜索文本。它不会删除单词中间的空格。我相信这是可取的行为,但如果你愿意,你可以改变。
好的答案!帮助了我很多! – Roman 2018-01-25 12:41:14
像T.J. Crowder在上面说过,过滤功能确实有奇效。在我的具体情况下,它不适合我。我需要在div内搜索多个表和它们各自的td标签(在本例中为jQuery对话框)。
$("#MyJqueryDialog table tr td").filter(function() {
// The following implies that there is some text inside the td tag.
if ($.trim($(this).text()) == "Hello World!") {
// Perform specific task.
}
});
我希望这对某人有帮助!
我发现了一种适用于我的方法。它不是100%确切的,但它消除了所有包含的字符串不仅仅包含我正在查找的单词,因为我检查了不包含单独空格的字符串。顺便说一下,你不需要这些“”。 jQuery知道你正在寻找一个字符串。确保在:contains()部分只有一个空格,否则它将不起作用。
<p>hello</p>
<p>hello world</p>
$('p:contains(hello):not(:contains())').css('font-weight', 'bold');
是的,我知道你有没有这样的东西<p>helloworld</p>
那么它不会工作,你可以覆盖':用自己的代码contains'选择,但我不认为这就是你是什么意思? – Blazemonger 2013-03-12 14:43:04
http://stackoverflow.com/questions/813477/jquery-selector-where-text-some-value – Dom 2013-03-12 14:43:48
你可以定义一个自定义选择器:http://stackoverflow.com/questions/12244929/jquery-custom-selector- undefined – BLSully 2013-03-12 14:44:05