我想知道是否有可能通过内部文本找到标签(或任何元素)。例如:
<label for="myCheckbox">SuperSweetCheckbox</label>
我希望通过文字SuperSweetCheckbox
找到它。
我知道这似乎有点反直觉,但由于应用程序的性质,我正在努力它似乎是必要的。我意识到我可以遍历每个标签,但如果可能的话,我宁愿避免使用该选项。
如果有人能提供一些帮助,我会很感激。
答案 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')")
根据
答案 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 强>
<强>的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");