2010-07-21 27 views
25

Además del ID, si dices, quieres un identificador único para un elemento HTML (digamos un div).Identificador único para elementos HTML

Busqué en el DOM algo (como un número o una cadena) que es único para cada elemento; pero el DOM es grande y no pude encontrarlo en Internet.

¿Existe alguna propiedad (en el DOM obviamente) que sea exclusiva de ese elemento? (Además de la ID y tampoco la especifica, pero viene cuando se construye el DOM)

+2

Fwiw, IE ofrece una [propiedad] IDunico (http: //msdn.microsoft.com/en-us/library/ms534704 \ (VS.85 \) .aspx) objetos DOM que, cuando se accede, genera un identificador único para ese elemento. No es parte de la especificación y no le ayudará en otros navegadores. –

+0

He creado un [gist] (https://gist.github.com/renaatdemuynck/57b1b78b6611e6d5d866) con un complemento que agrega la funcionalidad uniqueID de IE a otros navegadores. –

Respuesta

17

Como dice Pekka, sería más fácil si describiera lo que quiere hacer. Hasta entonces, aquí hay dos sugerencias.

A menos que realmente necesite expresar la identificación como un tipo de cadena, puede guardar la referencia de DOM normal.

Si necesita expresarlo como una cadena por algún motivo, tendrá que asignar una identificación única usted mismo.

var getId = (function() { 
    var incrementingId = 0; 
    return function(element) { 
    if (!element.id) { 
     element.id = "id_" + incrementingId++; 
     // Possibly add a check if this ID really is unique 
    } 
    return element.id; 
    }; 
}()); 
+0

Fui con una solución similar para crear identificaciones únicas. Gracias por la información. –

+3

Dado que está utilizando jQuery, debo informarle que se trata de una función 'data' con la que puede asignar cualquier tipo de información a un elemento: http://api.jquery.com/data/ De hecho, jQuery usa unqiue ID para implementar eso, sin embargo, no estoy seguro de si es posible acceder a esa ID de manera confiable. – RoToRa

2

Existe el atributo name que se puede direccionar por document.getElementByName.

No creo que existan otros identificadores únicos, aunque podría simular uno estableciendo una propiedad (como title) en un valor único, y luego consultar para eso. Pero eso es kludgy.

¿Para qué lo necesita exactamente? Si proporciona más información sobre su situación, es probable que alguien sugiera algo.

+0

Buscando una solución similar a la función de identificación en prototipo. Lamentablemente, estoy usando jQuery. Creo que sería mejor hacerlo creando mi propia función de identificación. –

4

El único otro identificador que puedo pensar es el XPath del elemento en el documento.

Por ejemplo, el enlace del título dentro del epígrafe de esta misma página tiene un XPath de

/html/body/div[3]/div[2]/div/h1/a 

Pero como ya se dijo Pekka, que depende de lo que quiere hacer. Y no creo que puedas obtener fácilmente el Xpath del DOM en JavaScript, a pesar de que Xpath está disponible hoy en día en los motores JS.

+1

Si solo pudiera acceder a esta información de forma nativa. –

+2

@Andy Xpath está disponible en los navegadores modernos. Simplemente no creo que haya una manera de hacer que el Xpath llegue a un nodo mediante algún tipo de función nativa. Al menos no estoy al tanto de ninguno. – Gordon

+0

lo siento, podría haber sido más claro que eso es lo que quise decir. –

0

Puede usar una biblioteca o hacer las suyas propias para crear un identificador único. JQuery tiene .data():

Almacenar datos arbitrarios asociados con los elementos coincidentes o regresar el valor en el almacén de datos llamado así por el primer elemento en el conjunto de elementos coincidentes.

1

Internet Explorer tiene una propiedad "uniqueID" para cada elemento. El problema es que los otros navegadores no lo admiten.

+0

IE tiene menos del 10% de uso en todo el mundo hoy en día. – Ant

0

Acabo de encontrar la misma situación, y mientras miraba algunos elementos DOM en el inspector de herramientas de desarrollo de Chrome, noté que todos ellos parecen tener una propiedad como jQuery11230892710877873282 asignada con un número único. Obviamente, el número después de 'jQuery' es diferente cada vez que carga la página, mi suposición es que jQuery está generando esto internamente cada vez que intenta acceder o manipular cualquier elemento DOM. Jugué un poco con eso, y parece que los elementos a los que nunca accede/manipula jQuery pueden no tener esta propiedad, pero en el momento en que haga algo como $(elem), la propiedad estará allí.Entonces, dado que estamos usando tanto jQuery como lodash, ideé la siguiente función para devolver un ID único independientemente de si el elemento realmente tiene un atributo de identificación DOM.

_.reduce($(elem), function(result, value, key) { if(_.startsWith(key, 'jQuery')) return value; }, 0) 
+0

Descubrí que este es el atributo jQuery 'expando', más información al respecto aquí: https://stackoverflow.com/questions/3922441/what-is-the-meaning-of-jquery-random-attributes-in -html-expando-attribute – AsGoodAsItGets

Cuestiones relacionadas