jQuery - 通过内部文本查找标签

时间:2011-04-24 18:01:16

标签: jquery dom jquery-selectors

我想知道是否有可能通过内部文本找到标签(或任何元素)。例如:

<label for="myCheckbox">SuperSweetCheckbox</label>

我希望通过文字SuperSweetCheckbox找到它。

我知道这似乎有点反直觉,但由于应用程序的性质,我正在努力它似乎是必要的。我意识到我可以遍历每个标签,但如果可能的话,我宁愿避免使用该选项。

如果有人能提供一些帮助,我会很感激。

5 个答案:

答案 0 :(得分:57)

使用选择器 :contains()

 var element = $("label:contains('SuperSweetCheckbox')");

匹配的文字可以直接在所选元素中,元素的后代中的任何一个或其组合中直接显示。与属性值选择器一样,:contains()括号内的文本可以写成裸字或用引号括起来。文本必须具有匹配的案例才能被选中。

答案 1 :(得分:5)

也许

$('label[value|="SuperSweetCheckbox"]')

根据:

http://api.jquery.com/attribute-contains-prefix-selector/

$("label:contains('SuperSweet')")

根据

http://api.jquery.com/contains-selector/

答案 2 :(得分:3)

这建立在卡斯帕的答案之上,但对于评论来说太大了。

我认为这对其他人有用。

我使用了Caspar的解决方案但发现空字符串""被认为存在于任何字符串中,请参阅:

https://stackoverflow.com/a/18399216/1063287

在我的情况下SuperSweetCheckbox是动态值,有时是空字符串,在这种情况下,我不希望发生任何匹配的逻辑。

使用match()创建伪函数似乎有效,请参阅:

https://stackoverflow.com/a/18462522/1063287

您也可以使用filter(),请参阅:

https://stackoverflow.com/a/15364327/1063287)。

下面是三个变体的示例 - :contains()filter()和自定义函数:

<强>的jsfiddle

jsFiddle link

<强>的jQuery

var myString = "Test";

//var myString = "";

// 01.  :contains() - matches empty string as well
$("ul li > label:contains(" + myString + ")").closest("li").addClass("matched").siblings("li").addClass("notmatched");

// 02.  filter()
$("ul li > label").filter(function() {
    return $(this).text() === myString;
}).closest("li").addClass("matched").siblings("li").addClass("notmatched");

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

$("ul li > label:textEquals(" + myString + ")").closest("li").addClass("matched").siblings("li").addClass("notmatched");

<强> HTML

<ul>
<li>
<label>Test</label>
</li>
<li>Oh Nu</li>
</ul>

<强> CSS

.matched {
background: yellow
}

.notmatched {
background: aqua;
}

答案 3 :(得分:1)

我认为:contains()选择器正是您所寻找的。在这里检查样品&gt; http://api.jquery.com/contains-selector/

答案 4 :(得分:-3)

以上指定的所有内容都是非常独特的,但如果它不起作用,请试试这个,请告诉我。

VAR $YesitHas=$("lable").innerText("SuperSweetCheckBox");