20

I have an element with id="A B". The following code fails:

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

The following code does not fail:

<input type="text" id="AB">
<script>$("#AB").click(function(){alert();});</script>
Randomblue
  • 112,777
  • 145
  • 353
  • 547

5 Answers5

31

While it’s technically invalid to have a space in an ID attribute value in HTML (see @karim79’s answer), you can actually select it using jQuery.

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

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

jQuery uses a Selectors API-like syntax, so you could use $('#A\\ B'); to select the element with id="A B".

To target the element in CSS, you could escape it like this:

<style>
  #A\ B {
    background: hotpink;
  }
</style>
Mathias Bynens
  • 144,855
  • 52
  • 216
  • 248
14

As they mentioned you shouldn't use spaces in id. But anyway, wouldn't this be working for you?

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

EDIT: yes it works, tested it!!! Don't kill me, standard-lovers!! ;-P

Tomas
  • 57,621
  • 49
  • 238
  • 373
13

Neither HTML4 nor HTML5 allows space characters in ID attribute values.

The HTML 4.01 spec states that 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 (.). For the class attribute, there is no such limitation. Classnames can contain any character, and they don’t have to start with a letter to be valid.

HTML5 gets rid of the additional restrictions on the id attribute. The only requirements left — apart from being unique in the document — are that the value must contain at least one character (can’t be empty), and that it can’t contain any space characters.

Source:

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

karim79
  • 339,989
  • 67
  • 413
  • 406
  • +1 This is correct. However, while it’s technically invalid to have a space in an ID attribute value in HTML, [you can make it work if you escape your jQuery selector correctly](http://stackoverflow.com/questions/6802765/jquery-dealing-with-a-space-in-the-id-attribute/7873035#7873035). – Mathias Bynens Oct 24 '11 at 08:45
4

There should not be space in an id, but this seems to works :

$("[id=A B]")
Enki
  • 563
  • 2
  • 5
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 (".").

That quote is pulled from another stackoverflow answer: jquery IDs with spaces

Community
  • 1
  • 1
Jasper
  • 75,717
  • 14
  • 151
  • 146