Technically, there is the id property, but not every element has to have it, so that is not the solution. Within the framework, there is a $uid method, which assigns an integer value to every element once MooTools is initialized (also for elements which are created dynamically later on). There is also a global counter value which increases the integer value and holds this „auto increment“ value. This is Native.UID.
So after that magic method has been called for every HTML element, each one has a „uid“ which can be obtained by myElement.uid. Sounds pretty easy and logic, right? Well, it is – except for forms. Guess what happens if an HTML form contains an input element with the name „uid“ and we want to store something at the form. You’re right: it crashes! Here’s why: The browser simply returns an input element instead of the integer value. Now imagine you have several forms of that kind and you want to submit them with the Form.Request class. It uses the occlusion pattern of the MooTools framework. Now as soon as one form has been sent that way, all the other forms will simply check if there is a request stored for input instead of their integer uid value. Thus: all the forms share the same request object and your application will crash!
Check out the exmaple page.