其内容的精确匹配选择元素其内容的精确匹配选择元素(Select element by exact m

2019-05-06 11:33发布

好吧,我不知道是否有一种方法可以使:contains() jQuery的选择器选择用了在输入的字符串元素

例如 -

<p>hello</p>
<p>hello world</p>

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

选择器将选择两个p元素,让他们大胆,但我想它只选择第一个。

Answer 1:

没有,没有的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>和类似的,你可避免调用$text使用innerHTML直接:

return this.innerHTML === "hello";

...但你得有很多段落为它无所谓,这么多,你可能有其他的问题,第一个。 :-)



Answer 2:

尝试添加一个扩展伪功能:

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

然后,你可以这样做:

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


Answer 3:

您可以使用jQuery的过滤器()函数来实现这一目标。

$("p").filter(function() {
// Matches exact string   
return $(this).text() === "Hello World";
}).css("font-weight", "bold");


Answer 4:

所以Amandu的回答大多是工作。 在野外使用它,但是,我遇到了一些问题,在这里并没有获得发现,我本来期望得到的物品。 这是因为有时有周边元素文本随机空白。 我相信,如果你正在寻找的“Hello World”,你仍然希望它匹配的“Hello World”,甚至是“世界您好\ n”。 因此,我只是说了“修剪()”方法的功能,从而消除周围的空白,并开始更好地工作。

特别...

$.expr[':'].textEquals = function(el, i, m) {
    var searchText = m[3];
    var match = $(el).text().trim().match("^" + searchText + "$")
    return match && match.length > 0;
}

此外,请注意,这个答案是非常相似的,选择由文本链接(精确匹配)

而二次注... trim 之前搜索文本删除空格。 它不会在的话中间删除空白。 我相信这是可取的行为,但你可以改变,如果你想。



Answer 5:

我发现我工作的方式。 这是不是100%准确,但它消除了包含不止我找的,因为我检查不包含个人空间字符串太字更多的所有字符串。 顺便说一句,你不需要这些“”。 jQuery的知道你正在寻找一个字符串。 请确保你只有在一个空间:包含()部分,否则将无法正常工作。

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

是的,我知道你是否有这样的东西,它不会工作<p>helloworld</p>



Answer 6:

像TJ克罗德如上所述,过滤功能没有奇迹。 这不是在我的具体情况为我工作。 我需要搜索多个表和它们各自的TD标记一个div内(在这种情况下,一个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.
    }
});

我希望这是有帮助的人!



Answer 7:

的。首先()将在这里帮助

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


文章来源: Select element by exact match of its content