Foros del Web » Programando para Internet » Javascript »

obtener un id unico para un elemento del dom

Estas en el tema de obtener un id unico para un elemento del dom en el foro de Javascript en Foros del Web. Necesito calcular una y otra vez un mismo ID para un elemento del dom. Es para generar cookies en base a el identificador único de ...
  #1 (permalink)  
Antiguo 10/11/2011, 17:01
Avatar de mayid
Colaborador
 
Fecha de Ingreso: marzo-2009
Ubicación: BsAs
Mensajes: 4.014
Antigüedad: 15 años, 1 mes
Puntos: 101
obtener un id unico para un elemento del dom

Necesito calcular una y otra vez un mismo ID para un elemento del dom. Es para generar cookies en base a el identificador único de un elemento (para que ese elemento muestre o no muestre un tooltip).

O sea, tengo varios selectores (por id, por nombre de clase) para generar tooltips sobre varios elementos. Y necesito ahora ponerle un id único a cada uno de esos elementos, al vuelo. No me puedo fiar del #id que yo le pongo manualmente porque algunos elementos usan classNames.

Busqué sobre md5, codigos de encriptación, xpath, scripts para obtener css paths, pero nada. Entonces, como puedo hacer para que cada vez que entre en una página pueda decidir si poner un tooltip para un elemento en particular, si no estoy pudiendo generarle un id único?

Espero quede claro el punto. Agradezco orientaciones.
  #2 (permalink)  
Antiguo 11/11/2011, 06:53
Avatar de Rappa  
Fecha de Ingreso: noviembre-2011
Ubicación: Montevideo, Uruguay
Mensajes: 80
Antigüedad: 12 años, 5 meses
Puntos: 13
Respuesta: obtener un id unico para un elemento del dom

En base a qué es que tomas la decisión de mostrar el tooltip o no?
__________________
Drugs and alcohol are not the answer
Unless you are asking what i'm doing this weekend
  #3 (permalink)  
Antiguo 11/11/2011, 07:42
Avatar de mayid
Colaborador
 
Fecha de Ingreso: marzo-2009
Ubicación: BsAs
Mensajes: 4.014
Antigüedad: 15 años, 1 mes
Puntos: 101
Respuesta: obtener un id unico para un elemento del dom

En base a una cookie que se genera al cerrar el tooltip.

Mira, usando la consola del firebug puedo veo herramientas como el CSS Path, que queda algo así:

Código CSS:
Ver original
  1. html body div#posts div div.page div div#edit4038775 table#post4038775.tborder tbody tr td.alt1 div.smallfont

Me pregunto si con javascript puedo construir esa cadena (vi algo de codigo que recorre parent tras parent para construirla) y luego codificarla. No se que otra cosa hacer para conseguir un nombre único para la cookie.

Ah! Una de las cosas que intenté fue el método "toString()". Podría serme útil? Pero cómo aplicarlo?
  #4 (permalink)  
Antiguo 11/11/2011, 08:18
Avatar de Aijoona
Colaborador
 
Fecha de Ingreso: mayo-2011
Ubicación: Buenos Aires
Mensajes: 779
Antigüedad: 13 años
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
  #5 (permalink)  
Antiguo 11/11/2011, 08:25
Avatar de mayid
Colaborador
 
Fecha de Ingreso: marzo-2009
Ubicación: BsAs
Mensajes: 4.014
Antigüedad: 15 años, 1 mes
Puntos: 101
Respuesta: obtener un id unico para un elemento del dom

Cita:
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).
Tal cual, en este caso la lógica no se respetará en absoluto porque dependerá de cómo navegue el usuario.

Gracias por el hash, lo voy a implementar. Acá encontré código para asegurar compatibilidad: http://www.tutorialspoint.com/javasc...ray_reduce.htm

En cuanto al css path, creo que algo así puede funcionar: http://stackoverflow.com/questions/3...om-dom-element, que para "#header #iloby-logo" devuelve
Código CSS:
Ver original
  1. "html:nth-child(2) > body:nth-child(2) > div#wrapper > div#header > div#header-content > div#iloby-logo"

Última edición por mayid; 11/11/2011 a las 08:42
  #6 (permalink)  
Antiguo 11/11/2011, 08:45
Avatar de Aijoona
Colaborador
 
Fecha de Ingreso: mayo-2011
Ubicación: Buenos Aires
Mensajes: 779
Antigüedad: 13 años
Puntos: 343
Respuesta: obtener un id unico para un elemento del dom

Ojo al piojo, que la funcion hashExample es eso, un ejemplo, puede no servir en el escenario que planteás. Fijate como anda y contanos.
__________________
blog | @aijoona
  #7 (permalink)  
Antiguo 11/11/2011, 12:03
Avatar de mayid
Colaborador
 
Fecha de Ingreso: marzo-2009
Ubicación: BsAs
Mensajes: 4.014
Antigüedad: 15 años, 1 mes
Puntos: 101
Respuesta: obtener un id unico para un elemento del dom

Genera un numero que rara vez llegaría a repetirse, eso es lo que entiendo. Y me sirve como generador de hash. Existen generadores de md5, etc en javascript pero creo que este va bien. Gracias!

Etiquetas: dom, unicos
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 19:30.