2012-08-31 11 views
6

Sto usando un selettore jQuery per verificare la presenza di caratteri a href:selettore jQuery contiene segno di uguale

var param = "something"; 
$("a[href*="+param+"]").css("color", "red"); 

Questo funziona bene fino a quando "qualcosa" contiene un segno =. Ad esempio:

var param = "xkey=123"; 
$("a[href*="+param+"]").css("color", "red"); 

quindi non ottengo alcun risultato. Qualcuno conosce una soluzione?

risposta

6

È necessario sfuggire al carattere = poiché ha un significato speciale se utilizzato in un jQuery selector. Ecco l'elenco completo di tutti i caratteri che devono essere sfuggito:

#;&,.+*~':"!^$[]()=>|/ 

Pertanto, è possibile utilizzare il seguente per sfuggire alla param:

param.replace(/([ #;&,.+*~\':"!^$[\]()=>|\/@])/g,'\\$1') 

Dal jQuery documentation:

Se desideri utilizzare uno qualsiasi dei meta-caratteri (come ! "# $% & '() * +,./:; < =>? @ [] ^` {|} ~) Come parte letterale di un nome, devi sfuggire al personaggio con due barre retroverse: \.

Ecco un DEMO.

+0

Anche questo funziona! Grazie –

3

Quota il parametro:

$("a[href*='"+param+"']") 

E se questo non bastasse (param possono contenere apostrofi) poi sfuggire loro:

$("a[href*='"+param.replace(/'/g,"\\'")+"']") 
+0

+1 per la soluzione più semplice che sospetto gestisca tutto ciò che può avere un parametro. –

+0

Eccellente - esattamente quello di cui avevo bisogno. Grazie –

0

Si sta comportando in quel modo taormina, alla fine si tradurrà al selettore ambiguo, ovvero $("a[href*=xkey=123]"), che in effetti non è valido.

fuga il segno uguale con \\ Infront e avvolgere la parte parametro con una citazione

var param = "xkey\\=123"; 
$("a[href*='"+param+"']").css("color", "red"); 
+0

In questo semplice caso, l'uno o l'altro (citando il parametro o escaping '=') dovrebbe funzionare. –

+0

Sì, non è necessario analizzare il 'param' per tutti i simboli. È un caso semplice e dovrebbe essere il più semplice possibile. – Starx

+0

L'aggiunta delle virgolette ha risolto il problema senza analisi ma grazie per il suggerimento –

0

è possibile convalidare in questo modo:

Speranza si inserisce la causa :)

foo - è la stringa;

if (! /^[a-zA-Z0-9]+$/.test(foo)) { 
    // Validation failed 
} 

O

Fuga in questo modo di controllo:

if(your_string.indexOf('=') != -1){ 
    alert("equal found."); 
} 

quindi sostituire = con \\=

2

devi sfuggire alla = con \\=.

param = param.replace(/=/g, '\\\\='); 

Ma ci sono altri caratteri speciali che è necessario eseguire l'escape nel selettore jQuery.

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

È inoltre possibile utilizzare il metodo .filter.

$('a').filter(function() { 
    return $(this).attr('href').indexOf(param) !== -1; 
})