2011-07-23 9 views
14

Mam element o id = "A B". Poniższy kod nie:jQuery: zajmowanie się spacją w atrybucie id

<input type="text" id="A B"> 
<script>$("#A B").click(function(){alert();});</script> 

Poniższy kod nie zawodzi:

<input type="text" id="AB"> 
<script>$("#AB").click(function(){alert();});</script> 
+0

możliwe duplikat [jquery identyfikatorów ze spacjami] (http://stackoverflow.com/questions/596314/jquery-ids- with-spaces) –

Odpowiedz

24

Choć jest to technicznie nieważny mieć miejsca w ID wartość atrybutu w HTML (patrz @ odpowiedź karim79 za) , możesz go wybrać za pomocą jQuery.

Zobacz http://mothereffingcssescapes.com/#A%20B:

<script> 
    // document.getElementById or similar 
    document.getElementById('A B'); 
    // document.querySelector or similar 
    $('#A\\ B'); 
</script> 

jQuery używa składni API jak Selectors, więc można używać $('#A\\ B'); aby wybrać element z id="A B".

Aby kierować element w CSS, można uciec to tak:

<style> 
    #A\ B { 
    background: hotpink; 
    } 
</style> 
+0

Jeśli ktoś się zastanawia, działa to również w przypadku Capybara podczas próby wybrania identyfikatora z spacją. –

1
 
ID tokens must begin with a letter ([A-Za-z]) and may be followed by any number of letters, digits ([0-9]), hyphens ("-"), underscores ("_"), colons (":"), and periods ("."). 

To cytat jest wyciągnięty z innej odpowiedzi stackoverflow: jquery IDs with spaces

9

Ani HTML4 ani HTML5 pozwala na wstawianie znaków spacji w wartościach atrybutów ID.

HTML 4.01 Spec stwierdza, że ​​żetony identyfikacyjne muszą zaczynać się od litery ([a-zA-Z]) i może być obserwowani przez dowolną liczbę liter, cyfr ([0-9]), łączniki (-), podkreślenia (_), dwukropki (:) i kropki (.). Dla atrybutu klasy nie ma takiego ograniczenia. Nazwy klas mogą zawierać dowolny znak i nie muszą zaczynać się od litery " ".

HTML5 pozbywa się dodatkowych ograniczeń dotyczących atrybutu id. Jedyne wymagania, jakie pozostały - oprócz unikalności w dokumencie - to: , że wartość musi zawierać co najmniej jeden znak (nie może być pusty), i że nie może zawierać żadnych znaków spacji.

Źródło:

http://mathiasbynens.be/notes/html5-id-class

+0

+1 To się zgadza.Jednak, gdy jest technicznie nieważne mieć spację w wartości atrybutu identyfikatora w HTML, [możesz sprawić, żeby działało, jeśli poprawnie wybrałeś swój selektor jQuery] (http://stackoverflow.com/questions/6802765/jquery-dealing-with -a-space-in-the-id-attribute/7873035 # 7873035). –

9

Gdy wspomniałem nie należy używać spacji w id. Ale czy to nie działa dla ciebie?

$("[id='A B']").click(...) 

EDIT: tak to działa, testowałem go !!! Nie zabijaj mnie, zwykli kochankowie !! ;-P

3

Nie powinno być miejsca w id, ale to wydaje się prac:

$("[id=A B]") 
+0

wydaje się, że wysłaliśmy go w tym samym czasie :) – TMS

Powiązane problemy