jQuery-通过内部文本查找标签
我想知道是否有可能通过标签的内部文本找到标签(或者任何元素)。例如:jQuery-通过内部文本查找标签,jquery,dom,jquery-selectors,Jquery,Dom,Jquery Selectors,我想知道是否有可能通过标签的内部文本找到标签(或者任何元素)。例如: <label for="myCheckbox">SuperSweetCheckbox</label> SuperSweetCheckbox 我想通过文本SuperSweetCheckbox找到它 我知道这似乎有点违反直觉,但由于我正在开发的应用程序的性质,这似乎是必要的。我意识到我可以遍历每一个标签,但如果可能的话,我宁愿避免这个选项 如果有人能提供帮助,我将不胜感激。使用选择器 var elem
<label for="myCheckbox">SuperSweetCheckbox</label>
SuperSweetCheckbox
我想通过文本SuperSweetCheckbox
找到它
我知道这似乎有点违反直觉,但由于我正在开发的应用程序的性质,这似乎是必要的。我意识到我可以遍历每一个标签,但如果可能的话,我宁愿避免这个选项
如果有人能提供帮助,我将不胜感激。使用选择器
var element = $("label:contains('SuperSweetCheckbox')");
匹配的文本可以直接出现在所选元素中、该元素的任何子元素中,或其组合中。与属性值选择器一样,
:contains()
的括号内的文本可以写为裸字或用引号括起来。文本必须有匹配的大小写才能被选择。我认为:contains()
选择器就是您要寻找的。在这里检查样本>也许
$('label[value|="SuperSweetCheckbox"]')
根据:
或
据
以上所有规定都是排他性的,但也请尝试一下,如果不起作用,请告诉我
VAR $YesitHas=$("lable").innerText("SuperSweetCheckBox");
这是建立在Caspar的答案之上的,但太大了,无法发表评论 我认为这对其他人可能有用 我使用了Caspar的解决方案,但发现任何字符串中都存在空字符串
“
,请参阅:
在我的情况下,SuperSweetCheckbox
是一个动态值,有时是一个空字符串,在这种情况下,我不希望出现任何匹配逻辑
使用match()
创建伪函数似乎可行,请参阅:
您也可以使用过滤器()
,请参阅:
)
下面是三个变体的示例-: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>
第一个不行。
label
元素没有属性value
@Felix,但它是DOM中元素的值。它不是。如果我检查元素,则没有值
属性。但要说服自己:value
是一个定义良好的属性。元素的内部文本不是这些元素的值。不幸的是,此选择器选择的文本可以是您要查找的实际值的子字符串。您要查找的示例值:test,标签中的值:这是一个测试。这意味着它将选择您不需要的值。不幸的是,我还没有找到解决办法。
<ul>
<li>
<label>Test</label>
</li>
<li>Oh Nu</li>
</ul>
.matched {
background: yellow
}
.notmatched {
background: aqua;
}