猿问

通过其内容的完全匹配选择元素

通过其内容的完全匹配选择元素

好吧,我想知道是否有办法让:contains()jQuery的选择器选择只有输入字符串的元素

例如 -

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

选择器将选择两个p元素并使它们变为粗体,但我希望它只选择第一个元素。


月关宝盒
浏览 474回答 3
3回答

holdtom

尝试添加一个extend伪函数:$.expr[':'].textEquals&nbsp;=&nbsp;$.expr.createPseudo(function(arg)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;function(&nbsp;elem&nbsp;)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;$(elem).text().match("^"&nbsp;+&nbsp;arg&nbsp;+&nbsp;"$"); &nbsp;&nbsp;&nbsp;&nbsp;};});然后你可以这样做:$('p:textEquals("Hello&nbsp;World")');

慕斯709654

所以Amandu的回答大多有效。然而,在野外使用它时,我遇到了一些问题,那些我希望找到的东西都没有找到。这是因为有时元素的文本周围会有随机的空白区域。我相信,如果你正在寻找“Hello World”,你仍然希望它能够匹配“Hello World”,甚至是“Hello World \ n”。因此,我刚刚将“trim()”方法添加到函数中,该函数删除了周围的空白,并且它开始更好地工作。特别...$.expr[':'].textEquals&nbsp;=&nbsp;function(el,&nbsp;i,&nbsp;m)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;searchText&nbsp;=&nbsp;m[3]; &nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;match&nbsp;=&nbsp;$(el).text().trim().match("^"&nbsp;+&nbsp;searchText&nbsp;+&nbsp;"$") &nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;match&nbsp;&&&nbsp;match.length&nbsp;>&nbsp;0;}另外,请注意,此答案与按文本选择链接非常相似&nbsp;(完全匹配)次要注释...&nbsp;trim仅删除搜索文本之前和之后的空格。它不会删除单词中间的空格。我相信这是理想的行为,但如果你愿意,你可以改变它。
随时随地看视频慕课网APP

相关分类

JQuery
我要回答