2015-06-03 11 views
9

Jest coś nie widzę tutaj .. Mam String-zmiennej z elementami ID:jQuery string-zmienna jak id wybieraka powrócić pustego obiektu

var sf_new_id = "#sf_widget_choice-32:14.86:1:1" 

mam ten ciąg z innego podobnego elementu ten ('sf_selectedmethod' to kolejny element):

var anotherid = sf_selectedmethod.attr('id'); 

Potem usunięto ostatni char i dodać kilka informacji na ten ID, czyli ostatni numer i '#':

var sf_new_id = anotherid.substr(0, anotherid.length-1); // Now without the last char. 
sf_new_id = '#'+sf_new_id+'1'; 

I staje się ciągiem opisanym powyżej.

I próbuję uzyskać dostęp do elementu z jQuery tak:

$(sf_new_id).addClass("..."); 

Element o takim identyfikatorze nie istnieje, ale nic się nie dzieje. Próbowałem ukryć element:

$(sf_new_id).hide(); 

Ale wciąż nic się nie dzieje.

umieścić cały element do console.debug i pokazuje pusty obiekt:

console.debug($(sf_new_id)); 

Wyjścia: w konsoli

Co ja tu brakuje Object []?

Edit: Próbowałem Escape-thingy, i wydaje się działać, ale teraz jest problem, że jak mogę uciec dwukropka i takie, kiedy informacja jest w zmiennej?

+0

temat kodów jest wykonywany po załadowaniu strony $ (document) .ready (function() {... kod ...}) – Yangguang

+3

Musisz uciec znaków jak? ':' A ' . " w zmiennej łańcuchowej. – Prachit

+0

Mam wątpliwość zmienna javascript zadeklarowana z # jako pierwsza postać? – shreyansh

Odpowiedz

7

Musisz uciec od znaków specjalnych w łańcuchu, aby utworzyć prawidłowy selektor.

var sf_new_id = "#sf_widget_choice-32:14.86:1:1"; 

sf_new_id = sf_new_id.replace(/:/g, "\\:") 
        .replace(/\./g, "\\.") 

$(sf_new_id).hide(); 
+0

Yesh !! To działa pięknie! Wielkie dzięki! Dziękuję także za innych. Dałem wam wszystko, ponieważ pierwotne pytanie nie było wystarczająco jasne. Przepraszam za to. – GotBatteries

5

Musisz uciec : i . w selektorze. Wypróbuj to:

var sf_new_id = "#sf_widget_choice-32\\:14\\.86\\:1\\:1"; 
9

Możesz technicznie używać dwukropków i kropek w atrybutach id/name, ale sugerowałbym unikanie obu.

W kilku bibliotekach JavaScript, takich jak jQuery, zarówno kropka, jak i dwukropek mają specjalne znaczenie i napotkasz problemy, jeśli ich nie używasz. Okresy to selektory klas, a dwukropki to pseudo-selektory (np. ": Hover" dla elementu, gdy mysz znajduje się nad nim).

Staraj się unikać "." i ":" w twoim atrybucie ID lub jeśli nie jest to możliwe. spróbuj uciec je w javascript jak poniżej:

var sf_new_id = "#sf_widget_choice-32\\:14\\.86\\:1\\:1"; 
3

ID powinien pasować:

[A-Za-z][-A-Za-z0-9_:.]* 
  1. musi zaczynać się od AZ lub znaków az
  2. Może zawierać - (myślnik), _ (podkreślenie) ,: (dwukropek) i. (okres)

, ale należy unikać: i.beauause:

Na przykład identyfikator może być oznaczony jako "ab: c" i wymieniony w arkuszu stylów jako #ab: c, ale jak również jest id dla elementu, może to oznaczać id "a", klasa "b", pseudo-selektor "c". Najlepiej, aby uniknąć nieporozumień i trzymać się z daleka od użycia. i: łącznie.

Powiązane problemy