2011-01-25 16 views
13

per esempio ho id comeCome uscire ":"?

someform: somepanel: somebutton

Quando faccio jQuery ("# someform: somepanel: somebutton") restituisce someform, come AUTOMATICAMENTE fuga che id?

EDIT:

voglio fare qualcosa di simile

jQuery(somefunction("#someform:somepanel:somebutton")) 
+3

http://api.jquery.com/category/selectors/ - Terza riga – jAndy

+0

@jAndy non è lì, puoi citare la risposta? – IAdapter

risposta

15

Se è solo questa versione molto specializzata, è possibile solo il carattere .replace().

function somefunction(selector) { 
    return selector.replace(/:/, '\\\\:'); 
} 

jQuery(somefunction("#someform:somepanel:somebutton")) 

viene poi convertita in

jQuery("#someform\\:somepanel\\:somebutton"); 

Per avere una versione più generica, è possibile utilizzare un'espressione regolare:

function somefunction(selector) { 
    return selector.replace(/(!|"|#|\$|%|\'|\(|\)|\*|\+|\,|\.|\/|\:|\;|\?|@)/g, function($1, $2) { 
     return "\\\\" + $2; 
    }); 
} 
+0

Ho trovato confuso i parametri di funzione. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/replace#Specifying_a_function_as_a_parameter fornisce una buona spiegazione. – elewinso

4

Prova:

jQuery("#someform\\:somepanel\\:somebutton") 
+0

So che posso farlo, ma voglio fare jQuery (somefunction ("# someform: somepanel: somebutton")) – IAdapter

+0

@ 01: Non sono sicuro di seguirlo. Non sfugge il ':' dal tuo commento sopra che cosa stai cercando? – VoodooChild

+0

c'è "somefunction" che può aggiungere AUTOMATICAMENTE \\ alla stringa prima:? – IAdapter

8

utilizzare i doppi backslash:

jQuery("#someform\\:somepanel\\:somebutton") 

correlati:


Update # 1

Dopo il tuo commento per quanto riguarda auto sfuggire il miglior metodo che vedo è quello di creare una funzione all'interno dell'oggetto stringa In questo modo

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

è anche possibile definire in modo specifico una funzione on per i due punti in questo modo:

String.prototype.escape_colon = function() 
{ 
    return this.replace(/:/,'\\$1') 
} 

Utilizzando questo modo:

jQuery("someform:somepanel:somebutton".escape()) 

ma ciò causerebbe problemi sulla pseudo selettori quali:

jQuery("someform:somepanel:somebutton:first".escape()) 

il selettore :first sarà sfuggito e quindi non troverai il tuo elemento.

ma y la nostra scommessa migliore sarà quella di costruire un parser stringa all'interno del prototipo di sostituire dove trova uno specifico set di caratteri quali:

jQuery("someform(_e(:))somepanel(_e(:))somebutton:first".escape()) 

questo modo si può definire che cosa si vuole fuggire, ma se così fosse, puoi anche fuggire da loro.

+0

So che posso farlo, ma voglio fare jQuery (somefunction ("# someform: somepanel: somebutton")) – IAdapter

+0

Aggiornato la mia risposta, devi essere più chiaro con le tue domande in futuro. – RobertPitt

1

ho creato una funzione per sfuggire due punti per JSF in jQuery :

//USAGE: $(espaceIdForJSF('#someId:anotherId')); 
function escapeIdForJSF(id) { 
    return id.replace(/:/g,"\\:").replace(/\./g,"\\."); 
} 
+0

Funziona alla grande! Grazie! –

1

Utilizzare questo trucco: jQuery($('myid'))

Motivo: sto utilizzando "prototype" per cercare l'elemento per id, quindi passo il risultato a jQuery.

Pro: più facile da leggere. Contro: necessita di Prototype e jQuery, ma RichFaces utilizza comunque Prototype.

+0

bel trucco !!!!!! – IAdapter

0

Se si utilizza PrimeFaces, hanno una comoda funzione di supporto per fare proprio questo:

escapeClientId (id) - Scampato ids JSF con punto e virgola per lavorare con jQuery.

chiamarlo:

PrimeFaces.escapeClientId("someform:somepanel:somebutton") 

che ritorna:

#someform\\:somepanel\\:somebutton 

Internamente, semplicemente chiama replace(/:/g,"\\:") e aggiunge il #, così si potrebbe usare anche questo.