Несколько идентичных идентификаторов в одном документе HTML - PullRequest
3 голосов
/ 09 марта 2012

Я создаю веб-страницу, включающую несколько HTML-шаблонов, которые могут содержать идентификаторы. В результате конечная страница может содержать несколько элементов HTML с точно таким же идентификатором, который не допускается HTML

Тем не менее мне кажется, что я могу решить эту проблему, используя контексты jQuery, такие как: $ ("# id54", template4), но будет ли это всегда работать во всех браузерах или некоторые браузеры будут отказывать мне в нескольких идентификаторах?

Ответы [ 3 ]

10 голосов
/ 09 марта 2012

Синтаксис $(selector, context) всегда будет выполнять поиск только в заданном контексте, поэтому, если ваши идентификаторы уникальны в этом контексте, ваш jQuery должен работать во всех браузерах.

Как вы понимаете, однако, не рекомендуется использовать идентификаторы таким образом, в шаблонах.

Поскольку множественные идентичные идентификаторы не допускаются, не существует спецификации того, как они должны обрабатываться. Никогда нельзя гарантировать, что все браузеры будут продолжать поддерживать код, который вы пишете. Однако этот код будет работать так, как вы ожидаете во всех основных браузерах сегодня.

В качестве обходного пути можно использовать классы или логику в вашем шаблонизаторе для обеспечения уникальных идентификаторов, например templateID-контроль-2-MyButton .

4 голосов
/ 09 марта 2012

Пока вы используете контекст jQuery, например, $('#some-id', context), все будет работать нормально.

Но вы должны действительно использовать имена классов вместо идентификаторов для элементов, которые встречаются на странице более одного раза.

1 голос
/ 09 марта 2012

Ни один браузер не запретит вам использовать несколько идентификаторов, но это плохая практика.Тег «ID» - это уникальный идентификатор для объекта в объектной модели документа (DOM).Если вы хотите использовать jQuery с этими идентификаторами, вам нужно найти другое решение.Примечание. Ваш код по-прежнему будет работать нормально и будет отображаться в любом браузере.Просто гораздо больше стресса для DOM, если вы постоянно обращаетесь к нему, и у них у всех один и тот же идентификатор!(Плюс, не очень легко обслуживаемый)

Если вам нужно, чтобы у каждого шаблона был один и тот же идентификатор, рассмотрите возможность использования класса (например, .template) или даже пользовательского атрибута (например, <div class="something" mycustomid="1">, затем используйте $ (.) .attr ('mycustomid') для доступа к нему. (Примечание: W3C HTML Validator не проверяет это)

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

Это не очень хороший ответ, но у меня нетдостаточно информации :)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...