Opinión: ¿en HTML, posibles identificaciones duplicadas o atributos no estándar?

Parece bastante común querer que su javascript sepa que un nodo dom en particular corresponde a un registro en la base de datos. ¿Entonces, cómo lo haces?

Una forma que he visto que es bastante común es usar una clase para el tipo y una identificación para la identificación:

myThing = select(".thing#5")

Sin embargo, hay un ligero problema con los estándares html: si tiene más de un tipo de registro en la página, puede terminar duplicando los ID. Pero eso no hace nada malo, ¿verdad?

Una alternativa es usar atributos de datos:

 
myThing = select("[data-thing-id=5]")

Esto evita el problema de los ID duplicados, pero significa que debe tratar con atributos en lugar de ID, lo que a veces es más difícil. ¿Qué piensan ustedes?

Tenga en cuenta que una ID no puede comenzar con un dígito, entonces:

 

es HTML no válido. Ver ¿Qué son los valores válidos para el atributo id en HTML?

En tu caso, usaría identificaciones como thing5 o thing.5 .

 
// Get thing on the page for a particular ID var myThing = select("#myapp-thing-5"); // Get ID for the first thing on the page var thing_id = /myapp-thing-(\d+)/.exec ($('.thing')[0].id)[1];

Dejarás algo del control del DOM

Es cierto, nada explotará, pero es una mala práctica. Si coloca identificadores duplicados en la página, básicamente perderá la capacidad de estar seguro de lo que recibirá cuando intente acceder a un elemento mediante su identificación.

 var whoKnows = document.getElementById('duplicateId'); 

El comportamiento es realmente diferente, dependiendo del navegador. En cualquier caso, puede usar classNames para valores duplicados, y evitará el problema por completo .

El navegador intentará pasar por alto las fallas en su marcado, pero las cosas se vuelven complicadas y más difíciles . Lo mejor que puede hacer es mantener su marcado válido. Puede describir tanto el tipo del elemento como su id. Única de base de datos en un className. Incluso podría usar múltiples classNames para diferenciarlos. Hay muchas posibilidades válidas :

 

o

 

o

 

o

 

Estos son todos los fragmentos legítimos y válidos de XHTML. Observe cómo, en el último fragmento, todavía tengo una identificación que funciona para mí, lo cual es bueno. Acceder a los elementos por su id es muy rápido y fácil, por lo que definitivamente desea poder aprovecharlo cuando pueda.

Ya pasarás suficiente tiempo en javascript asegurándote de que tienes los valores y tipos correctos . Poner identificadores duplicados en la página hará las cosas más difíciles para ti. Si puede encontrar formas de escribir tags que cumplan con los estándares, tiene muchos beneficios prácticos .

Los ID deben ser únicos de acuerdo con los estándares y, aunque la mayoría de los navegadores no omiten cuando se entregan identificaciones duplicadas, no sería una buena idea confiar en que siempre será así.

Convertir el ID en único al agregar un nombre de tipo a la ID funcionaría, pero debe preguntar por qué lo necesita. Darle un elemento a una identificación es muy útil cuando se necesita encontrar el elemento, getElementById es muy rápido. La razón es que la mayoría de los navegadores construirán un índice de ID a medida que carga el DOM. Sin embargo, si tiene tropecientos de ID que en realidad nunca necesitará usar en algo como getElementById, habrá incurrido en un costo que nunca se pagará.

Creo que la mayor parte del tiempo puede querer el ID del objeto en un evento disparado por el elemento o uno de sus hijos. En ese caso, usaría un atributo adicional en el elemento y no el atributo ID.

Dejaría el atributo de clase para hacer lo que se supone que debe hacer y no sobrecargarlo con tareas de identificación.

Considerando el hecho de que puede tener múltiples clases por elemento, ¿no podría crear un identificador único como una clase adicional por elemento? De esta forma, podría haber más de un elemento con el mismo “id” sin colisiones de atributos de ID HTML.

 

Sería fácil encontrar estos nodos y encontrar su registro DB correspondiente con una pequeña manipulación de cadenas.

En HTML5, podrías hacerlo así:

         
test

Si configura propiedades no estándar, asegúrese de configurarlas programáticamente (ya que todo será legal de esa manera) o de solucionar el problema de revisar el dtd. -)

Pero usaría una ID con una palabra significativa que anteponga la ID de DB y luego use .getElementById, ya que cada información necesaria está a la mano …

Los atributos no estándar están bien, si está usando XHTML y se toma el tiempo de extender el DTD que está utilizando para cubrir los nuevos atributos. Personalmente, usaría una identificación más única, como lo han sugerido otras personas.

No me gusta la solución de John Millikin . Va a ser intensivo en rendimiento en grandes conjuntos de datos.

Una optimización en su código podría reemplazar la expresión regular con una llamada a substring() ya que los primeros caracteres de la propiedad id son constantes.

Yo iría con la class correspondiente y luego una id específica sin embargo.

Hacer un seguimiento de tus datos a través del DOM me parece inestable; recuerde, esos ID son variables globales, por lo que si hay alguna posibilidad de que el guión de otra persona encuentre su camino en su página, es vulnerable. Para obtener los mejores resultados, cargue sus datos en un objeto dentro de una función anónima y luego escriba la tabla (o la gran lista anidada de DIV).