Jeśli mój HTML wyglądałby tak:
<td class="controlCell">
<input class="inputText" id="SearchBag.CompanyName" name="SearchBag.CompanyName" type="text" value="" />
</td>
Jak mogę wybrać # SearchBag.CompanyName za pomocą JQuery? Nie mogę zmusić go do działania i obawiam się, że to kropka to wszystko psuje. Irytujące jest to, że zmiana nazwy wszystkich moich identyfikatorów byłaby dużo pracy, nie wspominając o utracie czytelności.
Uwaga:
nie zaczynajmy mówić o tym, w jaki sposób tabele nie są tworzone do tworzenia układów. Jestem bardzo świadomy wartości i wad CSS i staram się z niego korzystać w jak największym stopniu.
Odpowiedzi:
@Tomalak w komentarzach:
„# Id.class” to prawidłowy selektor, który wymaga zarówno identyfikatora, jak i oddzielnej klasy, aby dopasować; jest ważny i nie zawsze całkowicie zbędny.
Prawidłowy sposób wyboru literału „”. w CSS jest to: „#id \ .moreid”. Powodowało to problemy w niektórych starszych przeglądarkach (w szczególności IE5.x), ale wszystkie nowoczesne przeglądarki stacjonarne obsługują to.
Ta sama metoda wydaje się działać w jQuery 1.3.2, chociaż nie przetestowałem jej dokładnie; quickExpr nie odbiera go, ale wydaje się, że bardziej zaangażowany parser selektora go poprawnie:
źródło
$('[id="profile.birthdate"]')
Jeden wariant byłby następujący:
źródło
Nie musisz niczego uciekać, jeśli używasz
document.getElementById
:getElementById
zakłada, że dane wejściowe są tylko atrybutem id, więc kropka nie będzie interpretowana jako selektor klasy.źródło
Krótka odpowiedź : jeśli masz element o id =
"foo.bar"
, możesz użyć selektora$("#foo\\.bar")
Dłuższa odpowiedź : jest to część dokumentacji jquery - selektory sekcji, które można znaleźć tutaj: http://api.jquery.com/category/selectors/
Odpowiedź na twoje pytanie znajduje się na początku dokumentacji:
źródło
wybór attr wydaje się odpowiedni, gdy twój identyfikator znajduje się w zmiennej:
źródło
Jest to udokumentowane w interfejsie API selektorów jQuery :
Krótko mówiąc, prefiks
.
z\\
.Problem polega na tym,
.
że pasuje do klasy, więc$('#SearchBag.CompanyName')
pasuje<div id="SearchBag" class="CompanyName">
. Uciekający z\\.
będzie traktowany jak normalny,.
bez specjalnego znaczenia, pasujący do pożądanego identyfikatora.Dotyczy to wszystkich znaków,
!"#$%&'()*+,./:;<=>?@[\]^`{|}~
które w innym przypadku miałyby specjalne znaczenie jako selektor w jQuery.źródło
Chłopaki, którzy szukają bardziej ogólnego rozwiązania, znalazłem jedno rozwiązanie, które wstawia jeden ukośnik przed dowolnymi znakami specjalnymi, co rozwiązuje problemy związane z odzyskiwaniem nazwy i identyfikatora z div zawierającej znaki specjalne.
Mam nadzieję, że to się przyda!
źródło
Możesz użyć selektora atrybutów:
Lub możesz określić typ elementu:
źródło