dojo.byId

В наборе инструментальных средств Dojo имеется функция dojo.byId, которая служит заменой методу document.getElementById. То есть, если передать функции строковое значение, например, dojo.byId("s1"), она вернет ссылку, которую можно было бы сохранить в переменной, как и в случае использования метода document.getElementById. Однако, кроме того, что она отыскивает элемент по значению атрибута id, функция dojo.byId может также играть роль пустой операции, если ей передать ссылку на узел дерева DOM. Функция анализирует полученный аргумент, поэтому при разработке приложения вам даже не придется вспоминать, как она действует. Полная сигнатура этой функции выглядит, как показано ниже:
dojo.byId(/*String*/ id | /*DomNode*/ node) // Возвращает ссылку на узел DOM

Может показаться, что функция dojo.byId выполняет те же действия, что и метод document.getElementById, и у вас вполне может возникнуть желание просто забыть о dojo.byId, но не торопитесь! Как оказывается, эта функция устраняет некоторые несовместимости между броузера ми, которые могут приводить к появлению ошибок, когда вы меньше всего ожидаете этого. Одна из хорошо известных ошибок, связанных с применением метода document.getElementById, проявляется в IE6 и IE7.

Для демонстрации сказанного введите следующую строку в консоли Firebug Lite после открытия документа с последним представленным
примером:
document.getElementById("foo") // Разве результат не очевиден?!?

Хмм.


Вероятно, вы не ожидали, что в качестве результата получите элемент FORM, не так ли? Оказывается, если бы этот элемент не стоял первым в документе, в качестве результата вы получили бы элемент div. Эта специфическая ошибка возникает изза того, что в IE атрибуты name и id расцениваются как одно и то же. Поэтому так важно помнить о совместимости броузеров даже в самых обычных вещах!

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

Кроме того что dojo.byId ликвидирует конкретную несовместимость между броузерами, она также возвращает первый элемент, если в документе имеется несколько элементов с одинаковым значением атрибута id, тем самым нормализуя неоднозначность выбора. Убедиться в том, что dojo.byId всегда возвращает первый встретившийся элемент, можно, попробовав применить к нашему документу следующую инструкцию:
dojo.byId("d2").innerHTML

Самый главный вывод из этого короткого урока заключается в том, что если в разработке вы применяете инструментальный набор JavaScript, – используйте его прикладной интерфейс, вместо того чтобы искать обходные пути на простом JavaScript.


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

Оцените статью: (0 голосов)
0 5 0

Статьи из раздела Dojo на эту тему:
dojo.addOnLoad
dojo.connect
Исследование Dijit
Исследование Dojo с помощью Firebug
Исследование библиотеки Base