J'ai un objet (dans ce cas, un objet d'évaluation de js-kit) que je souhaite rendre invisible si la valeur d'évaluation est "non classée". 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 concerne la partie :contains('Unrated')
de 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 qu'il sélectionne uniquement les nœuds ayant un seul nœud de texte enfant correspondant exactement à l'argument hasText()
. Alors 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;
};
}
Vous pouvez également utiliser les méthodes hide ()/show ().
$(".js-rating-labelText:contains('unrated')").hide()
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, si c'est le entier du texte de cette div, testez-le directement.
if ($('.js-rating-labelText').text() == 'unrated'){
$(this).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: -
<table>
<tr><td>John Smith</td><td>Marketing</td></tr>
<tr><td>Jane Smith</td><td>Sales</td></tr>
<tr><td>Mike Jordon</td><td>Technology</td></tr>
<tr><td>Mary Jones</td><td>Customer Support</td></tr>
</table>
Search: <input id="txtSearch" type="text">
<input id="btnTestIt" type="button" value="Test It">
<input id="btnReset" type="reset" value="Reset">
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");
});
});
Assurez-vous que votre code est en cours d’exécution après que la fonction js-kit ait rempli le texte et pas avant.