2009-08-20 13 views
41

duplicados posibles:
Custom attributes - Yay or nay?
Non-Standard Attributes on HTML Tags. Good Thing? Bad Thing? Your Thoughts?¿Está bien agregar sus propios atributos a elementos HTML?

En el proyecto de aprendizaje en el que estoy trabajando, tengo que añadir un atributo cuyo valor será un número. Al principio pensé en usar "id" para este propósito, pero an answer reveló que no es bueno hacer eso.

¿Está bien si creo mi propio atributo, diga "messid" y le asigno un valor numérico como "12", "6", etc.?

He aquí por qué quiero hacer esto para que pueda corregirme si lo estoy haciendo totalmente mal: Necesito acceder a este número en mi JavaScript (usando jQuery). Solo tomar el valor del atributo es fácil, pero extraer el valor numérico de una cadena como "m12" o "m6" es una molestia. (Soy un principiante en el mundo de JavaScript.)

Respuesta

90

Ha habido mucha discusión sobre esto:

Al final del día, estoy en el campamento que cree atributos de datos son la mejor manera de ir Se están introduciendo en HTML5 para evitar conflictos de nombres. En esencia, si desea almacenar los datos de cualquier cosa relacionada que simplemente escriba "Data-" en el nombre del atributo:

<div class="user" data-userid="5"></div> 

La única desventaja de todo el asunto es entonces que el XHTML no validará, pero sinceramente Don No me importa eso. (Así es, lo dije)

+9

+1. Estoy completamente de acuerdo en que este enfoque es una solución de trabajo que es simple de implementar y no rompe nada. El pragmatismo sobre el idealismo también gana en mi libro. – AnthonyWJones

+1

Me gustaría ir con esto, ya que funciona en la actualidad y dado que está en las especificaciones HTML5, probablemente funcione dentro de 10 años. También mantiene los datos independientes de otros valores (como mantenerlo en el atributo 'id', que podría tener que cambiar por otros motivos más adelante) mientras se mantiene en el elemento. Y sí, los errores de validación de HTML deben verse como recomendaciones/indicadores de problemas, no errores que deben repararse (y mientras sigo ese camino, diría lo mismo para JSLint solo para agitar un poco =) – Blixt

+6

"Así es, Lo dije "- el primer paso es admitirlo. ;) – nickf

-8

No - it's not.

+0

enemigos - ¿Qué he dicho mal? ¿Está bien si el sitio no pasa la validación de W3? –

+1

He votado esto * solo porque * Siento que es una respuesta genuina; aunque me atrevería a adivinar que los votos bajos se debieron a la falta de explicación. Y no, no creo que solo proporcionar un enlace sea suficiente. Creo que al menos debe resumir la página a la que se vincula, incluso si no elige explicar * usted mismo *. –

+1

@Arnis: Puede ser, puede que no, pero ¿qué tan difícil hubiera sido para ti incluir esa pequeña cantidad de texto en tu "respuesta"? – AnthonyWJones

8

En HTML 5, puede agregar cualquier atributo que comience por data-, por ejemplo, <div data-messid="12"> está bien.

HTML 4 y XHTML 1 no validarán si agrega su propio atributo, pero además nada malo sucederá si elige el nombre del atributo lo suficientemente único (para que no entre en conflicto con ningún atributo HTML actual o futuro).

2

Uso atributos personalizados, y como son compatibles con todos los navegadores que revisé, creo que no está mal usarlos. También puede usar etiquetas HTML personalizadas para simular HTML5, con algunos hack de IE, ¿por qué no utilizar atributos si no necesitan ningún hack?

De todos modos, se puede leer la discusión similar aquí: Custom attributes - Yea or nay?

1

Esto no es una respuesta definitiva, pero después de haber tenido que hacer esto en el pasado lo que puedo decir esto no sólo funciona bien, es multi-navegador amistoso.

5

Para que sepan, se puede extraer fácilmente una identificación de una cadena como M12 o M6, lo haría así:

//name the IDs m_12, m_3 etc 
var number = $('#someElement').attr('id').split('_')[1]; 

O si por ejemplo, usted tiene un montón de enlaces con los números de el ID que el anterior, y todos los enlaces tienen la clase clickMe:

$('a.clickMe').click(function() { 
    alert($(this).attr('id').split('_')[1]); 
}); 
+0

Así es como normalmente hago algo si simplemente tengo una ID que quiero recuperar, pero a veces hay más que eso. –

+0

Desearía poder votar una sola vez :) – codelame

1

Si se utiliza jQuery se puede utilizar .data para almacenar información personalizada en contra de un elemento.

La desventaja de los atributos personalizados son:

  • IE6 crea objetos adicionales para almacenar personalizado 'Expansión' atributos de estos tienen una tendencia a la fuga especialmente si se crean a través de la escritura.

  • validación emite

+0

Estoy usando ASP.NET MVC y estoy tratando de agregar el atributo personalizado "data-messid" usando el parámetro htmlAttribs de los métodos html helper: new {@class = "mcf", data-dd = Html.AttributeEncode (m.ID)}. Pero no funciona (problema de sintaxis). Veo que estás activo en la etiqueta ASP.NET MVC, así que ¿puedes ayudarme a cómo hacerlo? – Hemant

+0

Claro - pide otra Q con una etiqueta asp.net mvc – redsquare

+0

aunque lo que tienes se ve correcto – redsquare

Cuestiones relacionadas