2013-05-02 4 views
1

J'ai un peu de mal à utiliser jQuery contient un sélecteur; Considérez le html et jquery suivants pour vérifier si un élément contient du texte certain.jQuery contient un sélecteur et un caractère spécial

Par exemple HTML:

<div>welcome :)</div> 

jQuery Javascript:

$('div:contains("welcome :)")').length 

Si je lance le code JS ci-dessus pour que le HTML. Il ne renvoie pas 1 comme il se doit.

Cependant, les travaux suivants comme prévu

$('div:contains("welcome")').length 

Toute suggestion comment accueillir des caractères spéciaux comme des crochets ou des deux-points, etc?

+0

http://jsfiddle.net/FNrQX/ –

+0

double possible non repro de [valeur du sélecteur JQuery échapper] (http : //stackoverflow.com/questions/739695/jquery-selector-value-escaping) – pickypg

+1

@ FabrícioMatté Il rompt avec jQuery 1.7.2 – Dennis

Répondre

2

Je pense que cela peut être dû aux caractères d'échappement utilisés dans le sélecteur JQuery. Vous pouvez utiliser le caractère '\' avant les caractères d'échappement comme ':' pour résoudre le problème. Aussi pour l'approche générale ci-dessous la fonction peut être utilisée.

function jqescape(str) { return str.replace(/[#;&,\.\+\*~':"!\^\$\[\]\(\)=>|\/\\]/g, '\\$&'); } 

J'ai essayé pour ci-dessous l'expression, il m'a donné de résultat comme prévu:

$('div:contains("welcome \:")').length 
+0

Ce n'est pas ce que OP est Demander; le problème est le ')' dans le filtre 'contains' que vous avez omis de votre réponse. – Dennis

+0

Je pense que c'est un bug dans la méthode contains de JQuery. Je l'ai essayé mais il est en train d'appairer ')' avec les dernières parenthèses ouvertes et c'est pourquoi il ne s'identifie pas pareil. – Prashant

Questions connexes