The difference in this case is:
$ returns one object
$$ returns a collection (array type) with one object.
What are these methods`?
$('teste') === $$('#teste')[0] // true
$('teste') === document.getElementById('teste') // true
$ or Document.id
No Mootools $('id') is the corresponding to document.getElementById().
The method accepts a string that must be the ID of an element. This method always gives an object. If no object is found it returns null.
Can be used in the form $('id') or document.id('id') (more secure so as not to create incompatibilities with other libraries).
$$
$$ is the native method document.querySelectorAll, with a few more extras. For more browsers before the .querySelectorAll it combines other native methods to search for elements in the DOM. This method always returns an array/collection of Elements and accepts CSS selectors. The Mootools (Slick) search engine accepts a few more selectors, for example div !> ul, which is an inverse selector of >.
If the $$ (dollar double) find no DOM element it returns an empty array. Note that [] has a boolean value true, hence that using $$ should combine with .length if we want to have a boolean of the search.
Performance
The $ (or Document.id) method is the simplest of the two. However, since $$ allows CSS selectors and the $ is only for Ids they work differently. Regarding performance I have been testing now in IE, Firefox and Chrome and give different results. In IE wins the $ and in others the $$m, all with differences below 5%... I conclude that are +/- similar.
Note: as Mootools is a library that extends the prototype can also be used native methods combined with Mootools and then it gets a lot faster.
Test $ vs $$: http://jsperf.com/seletoresdomootools
In practice:
Fetch the contents of <div id="id">Conteúdo</div>:
var conteudo = $('id').get('html'); // dá-me "Conteúdo"
var conteudo = document.getElementById('id').get('html'); // dá-me "Conteúdo"
var conteudo = document.getElement('#id').get('html'); // dá-me "Conteúdo"
var conteudo = $$('#id').get('html'); // dá-me ["Conteúdo"]
Related:
In Mootools there is another method: document.getElement, it has the functionalities of $$ but returns an object like the $, the first you find.
Also related: a Dimitar’s answer on Soen
"returns a collection (array type)" I assume it returns an array filled with the located objects, that’s it?
– Zuul
$('id') === $$('#id')[0]? Both return an element extended by the library?– bfavaretto
@Zuul is a collection with some properties like length and index/array but is not an Array.
– Sergio