【发布时间】:2011-01-27 15:56:21
【问题描述】:
给定多个锚标签:
<a class="myclass" href="...">My Text</a>
如何选择与类匹配并带有一些特定文本的锚点。例如选择所有具有类的锚点:'myclass' 和文本:'My Text'
【问题讨论】:
标签: jquery html css-selectors
给定多个锚标签:
<a class="myclass" href="...">My Text</a>
如何选择与类匹配并带有一些特定文本的锚点。例如选择所有具有类的锚点:'myclass' 和文本:'My Text'
【问题讨论】:
标签: jquery html css-selectors
$("a.myclass:contains('My Text')")
【讨论】:
$('a.myclass[href]:contains("My Text")')
您可以创建一个类似于 :contains 的自定义选择器以进行精确匹配:
$.expr[':'].containsexactly = function(obj, index, meta, stack)
{
return $(obj).text() === meta[3];
};
var myAs = $("a.myclass:containsexactly('My Text')");
【讨论】:
如果您只是在锚的文本包含特定字符串时感到困扰,请使用@Dave Morton 的解决方案。但是,如果您想 完全 匹配特定的字符串,我会建议这样:
$.fn.textEquals = function(txt) {
return $(this).text() == txt;
}
$(document).ready(function() {
console.log($("a").textEquals("Hello"));
console.log($("a").textEquals("Hefllo"))
});
<a href="blah">Hello</a>
略微改进的版本(带有第二个 trim 参数):
$.fn.textEquals = function(txt,trim) {
var text = (trim) ? $.trim($(this).text()) : $(this).text();
return text == txt;
}
$(document).ready(function() {
console.log($("a.myclass").textEquals("Hello")); // true
console.log($("a.anotherClass").textEquals("Foo", true)); // true
console.log($("a.anotherClass").textEquals("Foo")); // false
});
<a class="myclass" href="blah">Hello</a>
<a class="anotherClass" href="blah"> Foo</a>
【讨论】:
首先,选择所有包含“我的文本”的标签。然后对于每个完全匹配,如果它符合条件,请执行您想做的任何事情。
$(document).ready(function () {
$("a:contains('My Text')").each(function () {
$store = $(this).text();
if ($store == 'My Text') {
//do Anything.....
}
});
});
【讨论】:
如果您不知道所需对象的类别,而只想查看链接文本,则可以使用
$(".myClass:contains('My Text')")
如果您甚至不知道它是哪个元素(例如 a、p、链接...),您可以使用
$(":contains('My Text')")
(将:之前的部分留空。)
我必须在这里补充一点,它会显示从<html>-Tag 开始的所有元素到所需的元素。我可以提供的一种解决方案是在其中添加.last(),但这仅在只有一个元素要查找时才有效。也许sbdy。在这里知道更好的解决方案。
实际上,这应该是对已接受答案的补充,尤其是对@Amalgovinus 问题的补充。
【讨论】:
我认为这应该适用于完全匹配的事情..
$("a.myclass").html() == "your text"
【讨论】:
html() 仅适用于匹配元素集中的第一个元素 (api.jquery.com/html)。您需要控制流或迭代来遍历每个锚点,例如 each()。