$
$(id | element) -> HTMLElement
$((id | element)...) -> [HTMLElement...]
Если передана строка (string), то возвращается элемент c указанным ID; иначе возвращается переданный элемент. Принимает произвольное число аргументов. Все элементы которые возвращаются этим методом поставляться уже с Prototype DOM расширениями.
Функция $ является краеугольным камнем Prototype. Она не только обеспечивает псевдоним для document.getElementById, она также позволяет вам передавать или IDs (strings) или DOM узлы в вашу функцию:
function foo(element) {
element = $(element);
/* продолжение функции... */
}
Код написанный таким образом очень гибкий — вы можете передать ID элемента или сам элемент без всяких приведений типов.
Вызов функции с одним параметром возвращает один элемент, в то время как вызов с несколькими параметрами возвращает массив элементов ( и это работае рекурсивно: вы можете передать массив, который содержит массивы и тд). Поскольку эта функция зависит от getElementById, : несуществующие ID будут возвращать null и ID которые дублируются на странице будут возвращать неправильный результат. Нельзя указывать один и тот же ID у разных элементов!
Эта функция также расширяет каждый возвращенный элемент средствами Element.extend - это значит вы можете использовать Prototype DOM расширения. В следующем коде две строки кода эквиваленты. Но все же, код во второй строке выглядит более объектно-ориентированным:
// не похоже на ООП...
Element.hide('itemId');
// Выглядит по лучше, благодаря гарантированному расширению
$('itemId').hide();
Даже при использовании итераторов, использование функции $ делает код более элегантным, более сжатым и конечно более эффективным:
['item1', 'item2', 'item3'].each(Element.hide);
// Лучше делать так:
$('item1', 'item2', 'item3').invoke('hide');
Читайте Как Prototype расширяет DOM чтобы узнать больше.