2011-01-25 16 views
13

na przykład mam id jakJak uciec ":"?

someform: somepanel: somebutton

Kiedy zrobić jQuery ("# someform: somepanel: somebutton") powraca someform jak do AUTOMATYCZNIE ucieczkę że ID?

EDIT:

Chcę zrobić coś takiego

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

http://api.jquery.com/category/selectors/ - Trzecia linia – jAndy

+0

@jNie jest tam, czy możesz zacytować odpowiedź? – IAdapter

Odpowiedz

15

Jeśli jest to tylko ta bardzo specjalistyczna wersja, można po prostu .replace() postać.

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

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

jest następnie przekształcany

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

Aby mieć wersję bardziej ogólne, można użyć wyrażenia regularnego:

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

Znalazłem parametry funkcji mylące. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/replace#Specifying_a_function_as_a_parameter daje dobre wyjaśnienie. – elewinso

4

Spróbuj:

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

Wiem, że mogę to zrobić, ale chcę zrobić jQuery (somefunction ("# someform: somepanel: somebutton")) – IAdapter

+0

@ 01: Nie jestem pewien, czy podążam. Czy nie ukrywasz ':' z powyższego komentarza, czego szukasz? – VoodooChild

+0

jest "somefunction", który może AUTOMATYCZNIE dodać \\ do ciągu przed:? – IAdapter

8

wykorzystać podwójne ukośniki:

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

pokrewne:


Aktualizacja # 1

Po komentarz w odniesieniu do auto ucieczki najlepszą metodę widzę jest stworzenie funkcji w obiekcie String tak jak

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

można również w szczególności zdefiniować functi na za dwukropkiem tak:

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

i używać tak:

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

ale będzie to powodować problemy na selektorów pseudo takich jak:

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

selektor :first będzie uciekł i dlatego nie znajdziesz swojego elementu.

ale y nasze najlepiej będzie zbudować parser ciąg w prototypu do zastąpienia, jeśli stwierdzi, określonego zestawu znaków takich jak:

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

W ten sposób można określić, co chcesz uciec, ale gdyby tak było, równie dobrze możesz uciec przed nimi samemu.

+0

Wiem, że mogę to zrobić, ale chcę zrobić jQuery (somefunction ("# someform: somepanel: somebutton")) – IAdapter

+0

Zaktualizowałem moją odpowiedź, musisz być bardziej przejrzysty z pytaniami w przyszłości. – RobertPitt

1

Stworzyłem funkcję ucieczki dwukropek dla JSF w jQuery :

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

Działa świetnie! Dziękuję Ci! –

1

Użyj tej sztuczki: jQuery($('myid'))

Powód: Używam "prototypu" do wyszukania elementu według identyfikatora, a następnie przekazuję wynik do jQuery.

Zalety: łatwiejsze do odczytania. Minusy: potrzebny prototyp i jQuery, ale RichFaces i tak używa prototypu.

+0

fajna sztuczka !!!!!! – IAdapter

0

Jeśli używasz PrimeFaces, mają poręczną funkcję pomocnika właśnie do tego:

escapeClientId (ID) - ucieczce identyfikatory JSF z pół jelita do pracy z jQuery.

nazwać:

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

która zwraca:

#someform\\:somepanel\\:somebutton 

Wewnętrznie, to po prostu wywołuje replace(/:/g,"\\:") i dodaje #, więc można użyć tego, too.