2011-06-10 7 views
15

Ho bisogno di eseguire un jquery solo se l'elemento grassetto contiene un testo particolare. Che cosa sto facendo di sbagliato?se contiene un determinato testo, quindi esegui jquery

<script> 
if ($('b:contains('Choose a sub category:')')) { 

$("td.colors_backgroundneutral").css("background-color","transparent"); 
$("td.colors_backgroundneutral").children(':first-child').attr("cellpadding","0"); 
}; 
</script> 
+4

uso ("") all'interno dei singoli apici ('') ... stai usando le virgolette singole all'interno di singole citazioni, che sta rompendo la corda. –

risposta

28

Oltre a utilizzare le virgolette singole all'interno di virgolette singole, che rompe la corda, si sta utilizzando un selettore jQuery all'interno di un'istruzione if. This selector filtra solo i tag b in quelli che contengono "Scegli una sottocategoria"; e quindi restituisce un elenco di tali elementi. Non restituisce un valore booleano. Invece, utilizzare il metodo .contains(), in questo modo:

if($("b").contains("Choose a sub category")) { 
    // do stuff 
} 

Puoi leggere altro here

EDIT: poiché il metodo .contains() sembra essere deprecato, ecco una soluzione di JS pura:

var el = document.getElementById("yourTagId") // or something like document.getElementsByTagName("b")[0] if you don't want to add an ID. 
if (el.innerHTML.indexOf("Choose a sub category") !== -1) { 
    // do stuff 
} 
+4

Sfortunatamente sembra che questo metodo 'jQuery(). Contains' non esista più, o almeno tutti i miei tentativi di usarlo attivano un errore di' no tale chiamata di funzione'. 'jQuery.contains' esiste, ma questo è per l'uso specifico con elementi DOM, e non stringhe di testo. Personalmente preferirei usare una chiamata al metodo piuttosto che costruire un selettore ': contains', quindi è piuttosto fastidioso se jQuery lo abbia rimosso. – Pebbl

+0

@Pebbl questo è il problema con jQuery. Molto meglio per eseguire il JS nativo qui, poiché sono solo alcune righe più lunghe. –

+0

Se questa soluzione ha mai funzionato per il testo non funziona più come da [questa documentazione] (https://api.jquery.com/jQuery.contains/) e la risposta non dovrebbe quindi essere più contrassegnata come corretta. La soluzione di ovahernow funziona per il testo come richiesto dalla domanda. – Luke

17

Ho sempre utilizzato questo per determinare se esiste un elemento:

doppi apici
if ($('b:contains("Choose a sub category:")').length > 0) { /*do things*/} 
+0

Non sono sicuro del motivo per cui sono stato downvoted poiché questo era il metodo consigliato per verificare la presenza di elementi esistenti: http://stackoverflow.com/questions/4592493/jquery-check-if-element-exists – ovaherenow

+1

neanche io; Credo che il downvoter non l'abbia visto come ideale in quanto esiste un metodo jQuery '.contains()' dedicato a questa particolare situazione. Ricorda, OP non vuole controllare se esiste, vuole solo vedere se il tag grassetto contiene del testo. Mentre entrambe le nostre soluzioni funzionano, la mia è solo un po 'più semanticamente corretta. :) Ti ho upvoted però. :) –

+0

Grazie Tom. Vorrei andare con il tuo pure. Volevo solo aggiustare il suo codice esistente. Ho anche svalutato il tuo. – ovaherenow

4
if ($("b").has(":contains('Choose a sub category:')").length) { 
/*Your Stuff Here*/ 
}