Фигурные скобки в атрибуте имени HTML

Я пытаюсь получить элементы DOM на основе их имени. К сожалению, в их именах есть фигурные скобки {}.

jQuery (1.6.4) может получить их без проблем. Но на данный момент я пытаюсь заменить эти вызовы на getElementsByName(), но gEBN не соответствует ничему, что имеет фигурные скобки в строке запроса. Я пытался избежать обратной косой черты один и два раза безрезультатно.

Есть ли способ сделать это без изменения соглашения об использовании фигурных скобок?

Похоже, они не входит в набор символов, разрешенных в имени attr.

Обновление: работает в Chrome, но не в Safari для Windows. Но что действительно странно, так это то, что даже Safari для Windows отлично справляется с этими скрипками.


person Steven Lu    schedule 24.04.2013    source источник
comment
Кажется, это работает jsfiddle.net/sachinyadav/p7bNZ   -  person Sachin    schedule 25.04.2013
comment
Не уверен, в чем проблема, вы видите эту скрипку jsfiddle.net/x7Xe5, она работает   -  person PSL    schedule 25.04.2013
comment
Проклятие. Похоже, это означает, что требуется дополнительное тестирование, если оно не может быть воспроизведено на скрипке.   -  person Steven Lu    schedule 25.04.2013
comment
Также похоже, что они не входят в набор символов, разрешенных в атрибуте имени. тогда не используйте недопустимые имена... решено! :)   -  person gdoron is supporting Monica    schedule 25.04.2013
comment
Я согласен с @gdoron. Есть правила по причине ;)   -  person Axel    schedule 25.04.2013
comment
@StevenLu: Вы видели эту статью? howtogeek .com/132602/   -  person Mottie    schedule 25.04.2013
comment
@Mottie, спасибо, я не знал, что Apple собирается полностью отказаться от поддержки Windows.   -  person Steven Lu    schedule 25.04.2013
comment
@gdoron Вы не должны привлекать меня к ответственности за код, написанный моими коллегами;)   -  person Steven Lu    schedule 25.04.2013


Ответы (2)


Если вы прочитаете страницу документации jQuery по селекторам, вы увидите следующее:

Чтобы использовать любой из метасимволов (например, !"#$%&'()*+,./:;‹=>?@[]^`{|}~ ) в качестве буквальной части имени, должен быть экранирован двумя обратными косыми чертами: \\ Например, элемент с id="foo.bar" может использовать селектор $("#foo\\.bar").

person Mottie    schedule 24.04.2013
comment
Что ж, тогда я думаю, что демонстрация проблемы в порядке: P - person Mottie; 25.04.2013
comment
Вопрос касается нативного JS-решения, которое явно избегает использования (уже работающего) маршрута jQuery. Но да. Я ... не могу воспроизвести это сейчас, за исключением чрезвычайно конкретного случая, когда страница находится внутри трех слоев фреймов. - person Steven Lu; 25.04.2013

Вы должны ожидать «странных» результатов, когда делаете что-то, явно выходящее за рамки стандарта. Если вы решите выйти из резервации, вы как бы предоставлены сами себе. Некоторые браузеры будут работать, некоторые нет. Те, которые раньше работали, сломаются без предупреждения, когда выйдет новая версия.

Так что это зависит от того, что вы пытаетесь сделать. Если вы просто создаете что-то для себя или небольшой команды, это может быть нормально. Если вы создаете что-то для широкой аудитории, лучше придерживаться стандартов и не использовать запрещенных персонажей.

person Leopd    schedule 24.04.2013