2010-02-03 14 views
17

Tengo una "excepción no detectada: error de sintaxis, expresión no reconocida:)" en una aplicación jQuery.jQuery contains() con una sintaxis variable

El código es:

<script> 
    $(document).ready(function(){      
     $('.drag').click(function() { 
      $('.drag').each(function(i) { 
       $(this).addClass('test' + i) 
      }); 

      var vtxt = $(this).text(); 
      $("p").removeClass("on"); 
      $("p:contains("+ vtxt +")").addClass("on"); 

     }); 
    }); 

El problema es cuando agrego la variable vtxt a una contiene: $ ("p: contiene (" + vtxt + ")"). addClass ("on");

He intentado varias citas pero simplemente no funciona. ¿Cuál es la sintaxis correcta para agregar una variable a un contenido?

+1

¿Cuál es el valor de 'vtxt'. Puede contener paréntesis. –

+0

Esto no está relacionado con jQuery per se. Es su entrada de JavaScript a contains() que es sintácticamente incorrecta. :) – bzlm

Respuesta

40

Prueba esto:

$("p:contains('" + vtxt + "')").addClass("on"); 
+0

vtxt no contiene corchetes. La respuesta de Andrew me dio una sintaxis válida, funciona ahora. ¡Gracias! – Mircea

+0

asegúrate de que escapas del contenido de vtxt, ya que fallará si alguna vez contiene el carácter ** '** o ** "** .. –

+0

¿Cómo debo escapar del vtxt? – Mircea

1

he utilizado esta respuesta con el fin de resolver un problema similar.
quiero evitar el uso de " y '

Al utilizar $("p:contains('" + valor + "')").addClass("on");, que funciona .

Pero al usar $('p:contains('" + valor + "')**'**).addClass("on"), no!

4

Pregunta anterior, pero debo dejar una nota para las generaciones futuras. La respuesta de Andrew (la aceptada) no funcionó para mí. Lo que hizo trabajo estaba usando una cadena prefabricada como selector. Tomando prestados ejemplos de OP:

var selector = "p:contains("+ vtxt +")"; 
$(selector).addClass("on");