JQuery: обработка пробела в атрибуте id

У меня есть элемент с id = "A B". Следующий код не работает:

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

Следующий код не работает:

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

Ответы

Ответ 1

В то время как технически недействительно иметь место в значении атрибута ID в HTML (см. ответ @karim79s), вы можете выбрать его с помощью jQuery.

См. http://mothereffingcssescapes.com/#A%20B:

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

jQuery использует синтаксис типа API-переключателей, поэтому вы можете использовать $('#A\\ B'); для выбора элемента с id="A B".

Чтобы настроить элемент в CSS, вы можете избежать его следующим образом:

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

Ответ 2

Ни HTML4, ни HTML5 не допускают пробельные символы в значениях атрибута ID.

В спецификации HTML 4.01 указано, что маркеры ID должны начинаться с буквы ([A-Za-z]), и за ним может следовать любое количество букв, цифр ([0-9]), дефисы (-), подчеркивания (_), двоеточия (:) и периоды (.). Для атрибута класса такого ограничения нет. Классные имена могут содержат любой символ, и им не нужно начинать с буквы Действительны.

HTML5 избавляется от дополнительных ограничений на атрибут id. останутся только требования - кроме того, что они уникальны в документе - что значение должно содержать по крайней мере один символ (не может быть пустым), и что он не может содержать любые пробельные символы.

Источник:

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

Ответ 3

Как уже упоминалось, вы не должны использовать пробелы в id. Но в любом случае, не будет ли это работать на вас?

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

EDIT: да, это работает, проверено! Не убивай меня, рядовые!;-P

Ответ 4

В id не должно быть пробела, но это, похоже, работает:

$("[id=A B]")

Ответ 5

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 (".").

Эта цитата извлекается из другого ответа stackoverflow: идентификаторы jquery с пробелами