jQuery – Trouver l’étiquette par le texte intérieur

Je me demandais s’il était possible de trouver une étiquette (ou n’importe quel élément, vraiment) par son texte intérieur. Par exemple:

 

Et je veux le trouver par le texte SuperSweetCheckbox .

Je sais que cela semble un peu contre-intuitif, mais en raison de la nature de l’application sur laquelle je travaille, cela semble être nécessaire. Je me rends compte que je peux parcourir chacune des étiquettes, mais je préférerais éviter cette option dans la mesure du possible.

Si quelqu’un pouvait fournir une aide, je l’apprécierais.

utiliser le sélecteur : contient ()

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

Le texte correspondant peut apparaître directement dans l’élément sélectionné, dans l’un des descendants de cet élément ou dans une combinaison de ceux-ci . Comme avec les sélecteurs de valeur d’atsortingbut, le texte entre parenthèses de :contains() peut être écrit sous forme de mots nus ou entouré de guillemets. Le texte doit avoir la casse correspondante pour être sélectionné.

Peut être

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

selon:

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

ou

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

selon

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

Cela s’appuie sur la réponse de Caspar, mais était trop volumineux pour les commentaires.

Je pensais que cela pourrait être utile pour les autres.

J’ai utilisé la solution de Caspar, mais j’ai constaté qu’une chaîne vide "" est réputée exister dans n’importe quelle chaîne, voir:

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

Dans mon cas, SuperSweetCheckbox est une valeur dynamic et parfois une chaîne vide, auquel cas je ne souhaite pas qu’une logique correspondante se produise.

La création d’une pseudo-fonction à l’aide de match() semble fonctionner, voir:

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

Vous pouvez également utiliser filter() , voir:

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

Vous trouverez ci-dessous un exemple des trois variantes :contains() , filter() et une fonction personnalisée:

jsFiddle

lien jsFiddle

jQuery

 var mySsortingng = "Test"; //var mySsortingng = ""; // 01. :contains() - matches empty ssortingng as well $("ul li > label:contains(" + mySsortingng + ")").closest("li").addClass("matched").siblings("li").addClass("notmatched"); // 02. filter() $("ul li > label").filter(function() { return $(this).text() === mySsortingng; }).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(" + mySsortingng + ")").closest("li").addClass("matched").siblings("li").addClass("notmatched"); 

HTML

 
  • Oh Nu

CSS

 .matched { background: yellow } .notmatched { background: aqua; } 

Je pense que le sélecteur :contains() est ce que vous recherchez. Vérifiez les échantillons ici> http://api.jquery.com/contains-selector/

Tout ce qui est mentionné ci-dessus est très exclusif, mais essayez-le aussi, si ça ne marche pas, faites-le-moi savoir.

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