Domanda

Ho un oggetto (in questo caso un oggetto di valutazione da js-kit) che voglio rendere invisibile se il valore di valutazione è 'senza punteggio'. Sto riscontrando problemi nell'ottenere il selettore jQuery giusto per farlo.

Anche se il codice seguente sembra funzionare, non funziona.

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

.js-rating-labelText è una classe impostata sul testo.

È stato utile?

Soluzione

  

Esiste un altro modo per selezionare un elemento in base al contenuto del testo?

Prova questo:

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

Altri suggerimenti

Puoi creare i tuoi metodi di selezione

Ad esempio, se si desidera essere in grado di eseguire le seguenti operazioni:

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

Puoi definire il metodo hasText come segue

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

props [3] contiene il testo tra parentesi dopo ': hasText'.

Forse il problema è con la parte : contiene ('Non classificato') della funzione. La modifica del testo in qualsiasi valore casuale produce lo stesso risultato:

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

Una leggera variante della risposta eccellente di @ tgmdbm. L'unica differenza è che seleziona solo nodi che hanno un singolo nodo di testo figlio che corrisponde esattamente all'argomento hasText () . Considerando che .innerText restituisce la concatenazione di tutti i nodi di testo discendenti.

  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;
     };
  }

Assicurati che il tuo codice sia in esecuzione dopo la funzione js-kit ha popolato il testo e non prima di esso.

In base al codice HTML che hai fornito, non vedo da dove provenga il testo "non classificato" che stai testando.

Tuttavia, se questa è la totalità del testo in quel div, provalo direttamente.

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

Potresti considerare di usare anche i metodi hide () / show ().

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

Il modo migliore per spiegare l'argomento è fornire un esempio e un link di riferimento: -

Esempio: - La seguente sintassi del selettore jQuery seleziona il primo o l'ennesimo elemento dall'insieme di elementi HTML già selezionati (corrispondenti).

$("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");
    });
});

Ecco alcuni degli html provenienti dalla funzione javascript:

<div class="js-kit-rating" id="ratingDiv" style="width: 86px; visibility: hidden;" jk$initialized="true" path="/business/blogger-com" permalink="/businessblogger-com" freeze="yes" starcolor="Golden">
  <table class="js-ratings-tableWrapper" border="0" cellSpacing="0" cellPadding="0">
    <tbody>
      <tr>
        <td>
          <div class="js-ratingWrapper" style="width: 80px;">
          <div style="float: left; cssfloat: left;">
              <div style="width: 80px; height: 15px;">
<div class=" js-kit-objIcon" style="width: 16px; float: left; height: 15px; cssfloat: left;" imageURL="//js-kit.com/images/stars/golden.png">
  <img style="display: none;" src="//js-kit.com/images/stars/golden.png" complete="complete"/>
<div class=" js-kit-objIcon" style="width: 16px; float: left; height: 15px; cssfloat: left;" imageURL="//js-kit.com/images/stars/golden.png"/>
<div class=" js-kit-objIcon" style="width: 16px; float: left; height: 15px; cssfloat: left;" imageURL="//js-kit.com/images/stars/golden.png"/>
<div class=" js-kit-objIcon" style="width: 16px; float: left; height: 15px; cssfloat: left;" imageURL="//js-kit.com/images/stars/gray.png">
  <img style="display: none;" src="//js-kit.com/images/stars/gray.png" complete="complete"/>
<div class=" js-kit-objIcon" style="width: 16px; float: left; height: 15px; cssfloat: left;" imageURL="//js-kit.com/images/stars/gray.png"/>
<div class=" js-rating-labelText">
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top