2012-08-14 23 views
11

¿Hay alguna forma de obtener los 3 valores de datos de este elemento?¿Es posible tener múltiples atributos de datos- {nombre} en HTML5?

<div id="viewport" 
    data-requires='js/base/paths' 
    data-requires='js/base/dialog' 
    data-requires='js/base/notifier'> 

Esto sería realmente útil para un proyecto que estoy comenzando. Con esto podría cargar los módulos js necesarios y vincularlos a la dom. Sé que puede sonar extraño, pero estoy intentando algo nuevo aquí.

+2

Probablemente significaba que requiere datos. No creo que puedas hacer eso. ¿Por qué no ponerlos todos juntos? data-requires = 'js/base/paths | js/base/dialog | js/base/notifier' –

+0

Creo que me quedaré con ponerlos todos juntos. La única razón por la cual escribir 3 requiere es hacer que se vea bonito para los nuevos desarrolladores unirse al equipo. –

+0

Sí, sería bueno poder hacer eso –

Respuesta

3

Puede ponerlos todos en uno si los separó por algo, luego los separó y los puso en una matriz.

// oops here's plain JS 
var arrayData = document.getElementById('viewport').getAttribute('data-requries'); 
var arr = arrayData.split(','); 

for (i = 0; i < arr.length; i++) { 
    console.log(arr[i]); 
} 

http://jsfiddle.net/S7D2D/1/

16

La respuesta a su pregunta es que el HTML no es compatible con varias instancias de la misma propiedad. Todas las formas típicas en las que podrías recuperar ese atributo solo recuperarán uno de los tres.

La forma habitual de resolver este problema es utilizar una única instancia del atributo y poner varias rutas como el valor. Para caminos, generalmente están separados por punto y coma.

<div id="viewport" data-requires='js/base/paths;js/base/dialog;js/base/notifier'> 

Y, a continuación, utilice el código para dividir el atributo multivalor en una matriz.

var requiredPaths = document.getElementById("viewport").getAttribute("data-requires").split(";"); 
+0

Este método funciona con las listas desplegables de Foundation para permitir múltiples opciones de datos como esta: 'data-options =" ​​is_hover: true; align: right "'. Gracias, ya que no pude encontrar cómo hacer esto en ningún otro lado. – lwalden

7

Puede utilizar estructuras más complejas dentro de los atributos data-.

lugar de esto:

<div id="viewport" 
data-requires='js/base/paths' 
data-requires='js/base/dialog' 
data-requires='js/base/notifier'> 

usted puede hacer esto:

<div id="viewport" 
data-requires='["js/base/paths", "js/base/dialog", "js/base/notifier"]'> 
</div> 

prueba usando jQuery.data() (que solo recupera la matriz de esta manera: jQuery('#viewport').data('requires')) está aquí: http://jsfiddle.net/3StZs/

+0

Curioso si hay navegadores que se ahogaran en esto ... –

+0

@rohit_wason: ¿Por qué estás preocupado por esto? Esa técnica existe desde hace años, y lo más probable es que incluso los navegadores abandonados sean compatibles (aunque, en primer lugar, ya no deberían usarse, y en segundo lugar, la versión de jQuery debería ser compatible). ¿Alguna preocupación específica que tenga con respecto a eso? jQuery parece ser bastante compatible con navegadores muy antiguos, si el tuyo es mucho más antiguo, es posible que necesites utilizar una versión mucho más antigua de jQuery para admitirlo. – Tadeck

+0

Mi comentario original era acerca de usar atributos múltiples. No creo haber leído la pregunta a fondo. Ya lo veo. –

Cuestiones relacionadas