2009-07-20 12 views
10

Estoy tratando de verificar si un tid innertext contiene paréntesis(). La razón es que visualizo los números negativos como (1000) y necesito convertirlos a -1000 para hacer las matemáticas. He intentado un par de maneras diferentes pero parece que no puedo hacerlo bien. Sé que hay formas no jQuery de hacer esto, pero en este momento me está molestando.¿Cómo escapas paréntesis en el selector jQuery?

$(tdElement[i]).find("\\(").length > 0 

Esto no tira error, pero no encuentra una InnerText (1000):

$(tdElement[i]).find("\\(") 
{...} 
    context: {object} 
    jquery: "1.3.1" 
    length: 0 
    prevObject: {...} 
    selector: "\(" 

Otro método que probé fue:

$("#fscaTotals td").filter(":contains('\\(')") 

Este tiros de error "Excepción lanzada y no atrapada". Sin embargo, parece funcionar para otros personajes. Ejemplo: ,; <>

Entonces, ¿cómo escapas paréntesis en jQuery?

Respuesta

9

creo que tendrá que utilizar una función de filtro como:

$('#fscaTotals td *').filter(function(i, el) { 
    return !!$(el).text().match(/\(/); 
}); 

Editar: Creo que esto es un error en jQuery de :contains().

-1

No uso mucho jQuery, pero el problema con el primero es que estás tratando de poner el texto donde debería ser un selector, y luego trataste de usar un selector ": contains", pero entonces intentado escapar del "(". ¿Ha probado $ ("# fscaTotals td"). filter (": contains ('(')")? Use contains, pero no intente escapar entre paréntesis

+0

error de sintaxis, la expresión no reconocida: '(') – eyelidlessness

3

puede añadir un filtro RegEx

esta técnica se explica en este Blog Entry

$.extend($.expr[':'], { 
    regex: function(a, i, m, r) { 
     var r = new RegExp(m[3], 'i'); 
     return r.test(jQuery(a).text()); 
    } 
}); 

Entonces podrías usar una expresión regular como esa.

("#fscaTotals td:regex('\([0-9]*\)')") 

Por cierto, he probado el ejemplo anterior con RegEx RegexBuddy y creo que es correcto para sus necesidades.

+0

1. Esta es una buena solución alternativa a la mía, pero yo diría que es básicamente un azúcar sintáctico alrededor del mío. – eyelidlessness

+1

@eyelidlessness definitivamente, ambos tienen el mismo resultado, pero diferentes implementaciones. Si está buscando reutilizar la funcionalidad, le recomendaría implementar el filtro de expresiones regulares, pero si esta es una solución, su solución funciona bien al 100%, probablemente sea bueno mostrar ambas para que las personas que encuentren esta pregunta busquen más adelante. puede ver las alternativas =) –