Sélecteur jQuery où text = une valeur

J’ai un object (dans ce cas, un object d’évaluation de js-kit) que je souhaite rendre invisible si la valeur d’évaluation est ‘unrated’ J’ai du mal à trouver le bon sélecteur jQuery pour le faire.

Même si le code ci-dessous semble fonctionner, cela ne fonctionne pas.

$(".js-rating-labelText:contains('unrated')").css("visibility", "hidden"); 

.js-rating-labelText est une classe qui est définie sur le texte.

Existe-t-il un autre moyen de sélectionner un élément en fonction du contenu du texte?

Essaye ça:

 $('.js-rating-labelText').filter(function(){ return (/unrated/i).test($(this).text()) }).css('visibility', 'hidden'); 

Vous pouvez créer vos propres méthodes de sélecteur

Par exemple, si vous voulez pouvoir effectuer les opérations suivantes:

 $('.js-rating-label:hasText(unrated)'); 

Vous pouvez définir la méthode hasText comme suit

 $.expr[':']['hasText'] = function(node, index, props){ return node.innerText.contains(props[3]); } 

props[3] contient le texte entre crochets après ‘: hasText’.

Peut-être que le problème est lié à la partie :contains('Unrated') la fonction. Comme changer le texte en n’importe quelle valeur aléatoire produit le même résultat:

 $("#ratingDiv:contains('somerandomtext')").hide(); 

Une légère variante de l’excellente réponse de @ tgmdbm. La seule différence est que seuls les nœuds ayant un nœud de texte enfant correspondant exactement à l’argument hasText() sont sélectionnés. Considérant que .innerText renvoie la concaténation de tous les nœuds de texte descendants.

  if( ! $.expr[':']['hasText'] ) { $.expr[':']['hasText'] = function( node, index, props ) { var retVal = false; // Verify single text child node with matching text if( node.nodeType == 1 && node.childNodes.length == 1 ) { var childNode = node.childNodes[0]; retVal = childNode.nodeType == 3 && childNode.nodeValue === props[3]; } return retVal; }; } 

Assurez-vous que votre code est en cours d’exécution après que la fonction js-kit a rempli le texte, et non avant.

D’après le code HTML que vous avez fourni, je ne vois pas d’où vient le texte “non classé” que vous testez.

Cependant, s’il s’agit de l’ intégralité du texte de cette div, il suffit de le tester directement.

 if ($('.js-rating-labelText').text() == 'unrated'){ $(this).hide(); } 

Vous pouvez également envisager d’utiliser les méthodes hide () / show ().

 $(".js-rating-labelText:contains('unrated')").hide() 

La meilleure façon d’expliquer le sujet est de donner un exemple et un lien de référence: –

Exemple: – La syntaxe de sélecteur jQuery suivante sélectionne le premier ou le nième élément de l’ensemble des éléments HTML déjà sélectionnés (correspondants).

 $("selector:contains(searchText)") 

Html: –

 
John SmithMarketing
Jane SmithSales
Mike JordonTechnology
Mary JonesCustomer Support
Search:

Jquery: –

 $(document).ready( function(){ $("#btnTestIt").click( function(){ var searchText = $("#txtSearch").val(); $("td:contains('" + searchText + "')").css("background-color", "yellow"); }); $("#btnReset").click( function(){ $("td").css("background-color", "white"); }); }); 

Voici une partie du code HTML provenant de la fonction javascript: