Такой подход почему-то работает в css. А вот js с этим работать отказывается. И вообще, спорить с тем, что "лучше сделать правильно, чем не правильно" - как то глупо.
не спорю. просто читая этот топик я вспомнил историю о том, что Вася наговнокодил, продал и ездит на крузаке, а Петя продолжает вылизывать код и ест доширак (утрированно). не совсем понял - можно подробнее.
Одинаково. Под капотом это одна и та же функция. Более того, поиска по дата-тэгам как такового нет. Это универсальный querySelector. С его помощью можно искать вообще что угодно и как угодно. По классам, по id, по дататегам, по именам, по самим тэгам, по любой комбинации вышеперечисленного, в том числе используя регулярочки в качестве шаблона поиска. Эта функция - нереально мощная нативная реализация жикверного $(). И работающая в разы быстрее, потому что native code. Я вообще, в последнее время только ей и пользуюсь. Эти вот гетбайкласснейм, гетбайнейм, гетбайайди - они сейчас существуют только для совместимости со старым кодом и, как таковые, уже давно не нужны. Это не слова. Это правила. Согласно спецификации HTML, в том числе HTML5, идентификатор, он же id, должен идентифицировать конкретный объект. Так, к примеру, в том же JS есть функции для выборки по класснеймам, по неймам, по тегам, и они могут возвращать массивы. Выборка по id возвращает только один элемент. id - это не просто параметр. Объект, имеющий id, регистрируется как свойство объекта window, прописываясь в глобальном пространстве имен. Так, на самом деле вовсе не обязательно делать выборку по id, чтобы потом ипользовать объект. Можно просто сразу обращаться к объекту по имени идентификатора как по имени переменной: https://jsfiddle.net/u5crufne/ Обрати внимание, в коде идет работа с кнопкой, но нигде нет ее запроса из DOM. Это не вопрос кошерности и не кошерности, или принципов сообщества или суеверий. Это вопрос соблюдения спецификаций языка разметки, которым пользуешься.
ИМХО это чушь. Хороший спец всегда ценится выше. js не будет работать с двумя элементами с одинаковыми id.
Код (Javascript): $(document).on('click','a#a',function(e) { $("#info,#error").stop().hide(); e.preventDefault(); $.ajax({ type:'get', url: $(this).prop('href'), } ).done(function (data) { ajaxReturn(data); }).fail(function() { errPrint('Произошла ошибка. Пожалуйста, подождите какое-то время и попробуйте обновить страницу. Если ошибка повторится, обратитесь к администратору.') }); }); --- Добавлено --- хм.. я читал несколько иное, но сам в вопросе разбираюсь не сильно. Точнее функция мб и одна, но по id идет именно native js, а все остальное уже обрабатывается большим количеством кода. И да, это не правила, а не более чем соглашения. Правила это устав несения гарнизонной и караульной служб, а тут нарушается вокруг и всеми и при этом работает. Вопрос я конечно проработаю, но объективных причин на изменения в коде пока не вижу.
Для чего этот код выше пока не понял @Amperandus, зачем придерживаться неправильного подхода? Сказано же в документации, id = один html-элемент.
просто конкретно в моем случае и для моих целей множественный одинаковый id работает. именно для этого код выше и показан
выше Код (Javascript): $(document).on('click','a#a',function(e) { а разговор начался с того, что на странице несколько ссылок с id="a"
Я человеку объясняю, что CSS почему то работает с двумя элементами с одинаковыми айди. А js отказывается. Филя выше дал ссылку на свой скрипт в качестве примера. А я скопировал html строку, чтобы показать, что если элемента будет два, то js работать не будет.
'a#a' я не проверял твой код у себя, но если рассуждать то это значит что ссылка с id='a' т.е. a#a Это что-то подобное HTML: <style> div.div{} </style> <div class'div'> </div> --- Добавлено --- Эт я понял, я на это намекал, его функция как бы не показывает что он одновременно назначил обработчик двум элементам с одинаковым id
native code это не native js. Я имел ввиду, что эти все функции - скомпилированные, являющиеся частью JS-движка а не реализованные на JS. И по умолчанию работают очень быстро. Логика выборки по дереву с проверкой заданных параметров одинаковая для каждой из них. Ох бл... Тебе русским языком сказано: спецификация HTML запрещает использовать один id для нескольких элементов. Это не блажь. Это не на словах. То, что ты делаешь вид, что это не так, ничего не меняет. Повторяю. Спецификация HTML запрещает использовать один id для нескольких элементов. То, что тебя старшина не отпиздит за дублирование ID еще не значит, что это не правило. Есть вот, правила русского языка. Их тоже можно нарушать. Тогда они не правила вовсе, а договоренности? Валидатор ругается на это не просто так. То, что браузеры, насколько возможно, терпят такие вещи, как и битую разметку, не значит, что можно пороть такую хрень. Это не от хорошей жизни такая фигня. Это потому, что среднестатистический верстальщик настолько необразован и безолаберен, что производителям браузеров проще пытаться исправлять за них ошибки, чем не отображать ничего вообще. Погугли на тему "драконовская обработка ошибок браузерами", когда был эксперимент со строгим соблюдением спецификаций. Уровень образованности верстальщиков не поднялся. А вот чуть ли не половина интернета перестала нормально отображаться.
если будет несколько элементов с одинаковым id, то браузер волен поступать как ему хочется, и это не всегда можно прогнозировать. И поведение может поменяться от версии к версии. Если стоит задача весело ловить баги и мучать юзеров - то флаг в жопу.
вот первое дельное замечание кроме каких то мифических соглашений от не менее мифических организаций http://www.cmsmagazine.ru/library/i...ur-script-jquery-to-67percent-more-efficient/ тут про скорость селекторов. хотя я не знаю насколько эта статья актуальна сейчас какое отношение верстальщики к js имеют?
Потому что на JS также манипулируют и вёрсткой. По этому верстальщик должен делать всё эффективнее если вёрсткой потом будут манипулировать на JS
так нет соглашения - нет и определённости. А нет определённости - бяда. --- Добавлено --- ну "верстальщик" он как "вебадмин" - что-то специфичекое и странное. А "фронтэндер" - он и верстать должен, и сам же со своей вёрсткой работать.
Тебе привели даже пример, где при использовании одинаковых id ломается js-код. Или ты просто игнорируешь все, что не спопобен понять? Ну там не знаю, абзац длиннее двух предложений? Игорь сказал ровно то, что было сказано до этого. Но простенько. И да, это ты мифический. О тебе ничего неизвестно, кроме ника и айпишника. А вот W3C знают все образованные вебразрабы. --- Добавлено --- тут про jquery, а не про скорость селекторов. Про то, что для простых селекторов она использует встроенные гетБайЧто-то там, а для сложных - перебирает весь DOM поэлементно. Тебе же говорили про нативную querySelector.
Резонно. Просто в современных реалиях "чисто бэкенд девелопер" - это довольно редкое явление. Так или иначе Бэкендщик сегодня, скорее всего, умеет и в фронт хоть сколько-то. И тут, если он искал инфу или доки по фронту, на W3C не наткнуться он никак не мог. Это лишь вопрос времени. И да. Вот и у тебя это время пришло. Теперь ты тоже знаешь, кто заведует развитием этого вашего Интернета. И да, в общем-то W3C заведуют не только фронтом. Там же спецификации протоколов, к примеру. Всякие вебсокеты, https-ы, это вот все тоже от них исходит.
сделай себе закладку в браузере на эту тему и почитай через годик другой практики. Возможно увидишь эту тему совсем в другом свете. Так настойчиво кривую верстку не продвигают даже в цирке.