Ver Mensaje Individual
  #4 (permalink)  
Antiguo 11/11/2011, 08:18
Avatar de Aijoona
Aijoona
Colaborador
 
Fecha de Ingreso: mayo-2011
Ubicación: Buenos Aires
Mensajes: 779
Antigüedad: 13 años, 6 meses
Puntos: 343
Respuesta: obtener un id unico para un elemento del dom

Si necesitas ids únicos podes generarlos mediante un seed autoincremental:

Código Javascript:
Ver original
  1. var createId = (function() {
  2.     var map = {};
  3.     return function(prefix) {
  4.         prefix = prefix || 'generated';
  5.         map[prefix] = map[prefix] || 0;
  6.        
  7.         var id = prefix + '-' + map[prefix]++;
  8.  
  9.         // Valida que no exista un elemento con
  10.         // el mismo id
  11.         if(document.getElementById(id)) {
  12.             return createId(prefix);
  13.         }
  14.         return id;
  15.     }
  16. })()
  17.  
  18. createId('tooltip'); // "tooltip-0"
  19. createId('tooltip'); // "tooltip-1"
  20. createId('tooltip'); // "tooltip-2"
  21. createId('tooltip'); // "tooltip-3"
  22. createId('content'); // "content-0"
  23. createId(); // "generated-0"

Si respetás siempre la misma estructura y lógica debería respetarse. Ahora, de no ser así estarías obligado a usar algún tipo de hash sobre algo distintivo del elemento (css path o contenido).
En este caso tenés que asegurarte de que el hash sea algo cercano a único, para evitar falsos "positivos".

Un ejemplo rápido de hashing (requiere browsers que soporten ecma 262-6, para el método reduce):

Código Javascript:
Ver original
  1. function hashExample(str) {
  2.     return str.replace(/\s*/g, '').split('').reduce(function(memo, current, index) {
  3.         return memo + current.charCodeAt(0) * index;
  4.     }, 0).toString(16);
  5. }
  6.  
  7. hashExample('perro'); // "45b"
  8. hashExample('perro') === hashExample('perro'); // true
  9. hashExample('gato'); // "296"
  10.  
  11. // Tu css path:
  12. hashExample('html body div#posts div div.page div div#edit4038775 table#post4038775.tborder tbody tr td.alt1 div.smallfont'); // "6d5bf"
__________________
blog | @aijoona