Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery 根据元素内容的精确匹配来选择元素_Jquery_Jquery Selectors - Fatal编程技术网

Jquery 根据元素内容的精确匹配来选择元素

Jquery 根据元素内容的精确匹配来选择元素,jquery,jquery-selectors,Jquery,Jquery Selectors,好的,我想知道是否有办法让:contains()jQuery的选择器选择只包含键入的字符串的元素 例如- <p>hello</p> <p>hello world</p> $('p:contains("hello")').css('font-weight', 'bold'); 你好 你好,世界 $('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:contains(“hello”)).css('font-weight','bold'); 选择器将选择两个
p
元素并将其加粗,但我希望它只选择第一个。

否,没有jQuery(或CSS)选择器可以这样做

您可以随时使用:

它不是选择器,但它完成了任务。:-)

如果要处理“hello”之前或之后的空白,可以在其中添加:

return $.trim($(this).text()) === "hello";
对于那些不成熟的优化器,如果您不在乎它与
hello

和类似的内容不匹配,您可以通过直接使用
innerHTML
避免调用
$
text

return this.innerHTML === "hello";
…但你必须有大量的段落才能让它起作用,很多段落可能会先有其他问题。:-)

您可以使用jQuery的函数来实现这一点

$("p").filter(function() {
// Matches exact string   
return $(this).text() === "Hello World";
}).css("font-weight", "bold");
.first()在这里会有所帮助

$('p:contains("hello")').first().css('font-weight', 'bold');

尝试添加扩展伪函数:

$.expr[':'].textEquals = $.expr.createPseudo(function(arg) {
    return function( elem ) {
        return $(elem).text().match("^" + arg + "$");
    };
});
然后你可以做:

$('p:textEquals("Hello World")');

所以阿曼杜的答案大部分是有效的。然而,在野外使用它时,我遇到了一些问题,我本希望找到的东西却没有找到。这是因为有时元素的文本周围会出现随机空白。我相信,如果您正在搜索“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;
}
另外,请注意,这个答案与


第二个注意<代码>修剪仅删除搜索文本前后的空白。它不会删除单词中间的空格。我相信这是一种理想的行为,但是如果你愿意,你可以改变它。

就像上面提到的T.J.Crowder一样,过滤功能确实很神奇。在我的特殊情况下,它对我不起作用。我需要在一个div中搜索多个表及其各自的td标记(在本例中是jQuery对话框)


我希望这对某人有帮助

我找到了一种适合我的方法。它不是100%精确的,但它消除了所有包含不只是我要查找的单词的字符串,因为我也检查了不包含单个空格的字符串。顺便说一句,你不需要这些。jQuery知道您正在寻找字符串。确保:contains()部分中只有一个空格,否则它将无法工作

<p>hello</p>
<p>hello world</p>
$('p:contains(hello):not(:contains( ))').css('font-weight', 'bold');
你好

你好,世界

$('p:contains(hello):not(:contains())).css('font-weight','bold');
是的,我知道如果你有像helloworld这样的东西,它是不起作用的,一个与jQuery一起工作的一行程序:

$('p').filter((i, p) => $(p).text().trim() === "hello").css('font-weight', 'bold');
这相当于jQuery的
a:contains(“模式”)
选择器:

var res = $('a').filter((i, a) => $(a).text().match(/pattern/));

嗯,您可以用自己的代码覆盖
:contains
选择器,但我不认为这是您的意思。您可以定义一个自定义选择器:的可能重复项:的可能重复项也可能希望
$。在进行比较之前,修剪它的任何多余空格。出于某种原因,我不得不使用“==”要让它代替“===”@Stephan:如果你在与一个数字进行比较,你必须使用
==
==2
)或者将数字放在一个字符串中(
==“2”
),因为你从
text()
innerHTML
获得的值总是一个字符串。如果要与字符串进行比较,那么使用
=
还是
==
都无关紧要。jQuery实现了
:contains
,这有点复杂,但没有实现精确文本匹配的选择器,这让人感到遗憾={当然……在这个特定的例子中。如果在开发时不知道顺序怎么办?很好的解决方案:很少添加:为了确保不覆盖现有的expr,我会这样做:
$.expr[':'].textEquals=$.expr[':'].textEquals | |$.expr.createPseudo(function(arg){
我对jquery很陌生,但我认为使用每一个()而不是filter(),因为filter的目标是返回一个子数组。但这确实激发了解决方案的灵感,因为我也有同样的问题:)巧妙地使用包含(..)的简单匹配,而不使用过滤器或扩展!不适用于任何需要在第一个包含(..)中使用空格的内容,但尝试为此找到一个解决方案。谢谢!
$('p').filter((i, p) => $(p).text().trim() === "hello").css('font-weight', 'bold');
var res = $('a').filter((i, a) => $(a).text().match(/pattern/));