Это основано на ответе Каспара, но было слишком большим для комментариев.
Я думал, что это может быть полезно для других.
Я использовал решение Каспара, но обнаружил, что пустая строка ""
считается существующей в любой строке, см .:
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;
}