2011-06-10 13 views
15

Necesito ejecutar un jquery solo si el elemento en negrita contiene texto en particular. ¿Qué estoy haciendo mal?si contiene cierto texto, luego ejecute 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

use comillas dobles ("") dentro de las comillas simples ('') ... está utilizando comillas simples dentro de comillas simples que están rompiendo la cadena. –

Respuesta

28

Además de utilizar comillas simples dentro de comillas simples, lo que rompe la cadena, está utilizando un selector jQuery dentro de una instrucción if. This selector solo filtra sus etiquetas b a aquellas que contengan "Elija una subcategoría"; y luego devuelve una lista de esos elementos. No devuelve un booleano. su lugar, utilice el método .contains(), así:

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

Usted puede leer más here

EDIT: ya que el método .contains() parece estar en desuso, he aquí una solución pura JS:

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

Desafortunadamente, parece que este método 'jQuery(). Contains' ya no existe, o al menos todos mis intentos para usarlo desencadenan un error de' no tal llamada a la función'. 'jQuery.contains' existe, pero eso es para usar específicamente con elementos DOM, y no cadenas de texto. Personalmente prefiero utilizar una llamada a método que construir un selector ': contains', por lo que es bastante molesto si jQuery lo ha eliminado. – Pebbl

+0

@Pebbl este es el problema con jQuery. Es mucho mejor rodar JS nativos aquí, ya que son solo unas pocas líneas más. –

+0

Si alguna vez esta solución funcionó para el texto, ya no funciona de acuerdo con [esta documentación] (https://api.jquery.com/jQuery.contains/) y, por lo tanto, la respuesta ya no debe marcarse como correcta. La solución de ovahernow funciona para el texto según lo requiera la pregunta. – Luke

17

Siempre lo he usado para determinar si existe un elemento:

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

No estoy seguro de por qué he votado negativamente porque esta era la forma recomendada de verificar elementos existentes: http://stackoverflow.com/questions/4592493/jquery-check-if-element-exists – ovaherenow

+1

yo tampoco; Creo que el infractor no lo consideraba ideal ya que hay un método jQuery '.contains()' dedicado a esta situación particular. Recuerde, OP no quiere verificar si existe, solo quiere ver si la etiqueta en negrita contiene texto. Si bien ambas soluciones funcionan, la mía es un poco más semánticamente correcta. :) Sin embargo, te subí a la votación. :) –

+0

Gracias Tom. Yo también iría con los tuyos. Solo quería arreglar su código existente. También he votado el tuyo. – ovaherenow

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