Comment échapper aux parenthèses dans le sélecteur jQuery?

J’essaie de vérifier si un td innertext contient des parenthèses (). La raison en est que j’affiche des nombres négatifs sous la forme (1000) et que je dois les convertir en -1000 pour pouvoir calculer. J’ai essayé plusieurs façons mais je n’arrive pas à comprendre. Je sais qu’il existe des moyens non jQuery de le faire, mais pour le moment, cela me dérange.

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

Cela ne jette pas d’erreur, mais ne trouve pas un innertext de (1000):

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

Une autre méthode que j’ai essayée était:

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

Cela jette l’erreur “Exception levée et non interceptée”. Cela semble fonctionner pour d’autres personnages cependant. Exemple: . ,

Alors, comment échapper à des parenthèses dans jQuery?

Je pense que vous devrez utiliser une fonction de filtre comme:

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

Edit: Je pense qu’il s’agit d’un bogue dans jQuery :contains() .

Vous pouvez append un filtre RegEx

Cette technique est expliquée dans cette entrée de blog

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

Ensuite, vous pouvez utiliser une expression régulière comme ceci.

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

A propos, j’ai testé l’exemple de RegEx ci-dessus avec RegexBuddy et je pense qu’il est correct pour vos besoins.

Je n’utilise pas beaucoup jQuery, mais le problème avec votre premier problème est que vous essayez d’insérer du texte dans un sélecteur – vous avez alors essayé d’utiliser un sélecteur “: contient”, mais vous avez ensuite tenté de vous échapper. “(“. Avez-vous essayé $ (“# fscaTotals td”). Filter (“: contient (‘(‘)”)? Utilisez contient, mais n’essayez pas d’échapper aux parenthèses.