Foros del Web » Programando para Internet » Javascript »

[SOLUCIONADO] ¿Cómo obtener valor de atributo DATA (HTML5)?

Estas en el tema de ¿Cómo obtener valor de atributo DATA (HTML5)? en el foro de Javascript en Foros del Web. Hola! La idea es esta: Tengo un select con varios options , cada uno con el atributo data , el cual debe ser leído con ...
  #1 (permalink)  
Antiguo 07/09/2014, 09:42
Avatar de berkeleyPunk  
Fecha de Ingreso: febrero-2013
Ubicación: México :C
Mensajes: 565
Antigüedad: 11 años, 3 meses
Puntos: 22
Pregunta ¿Cómo obtener valor de atributo DATA (HTML5)?

Hola!

La idea es esta: Tengo un select con varios options, cada uno con el atributo data, el cual debe ser leído con JS al seleccionar una opción de dicho select.

Código HTML:
Ver original
  1. <select onchange="x(this.dataset.fruta)">
  2.    <option>:: Selecciona una fruta ::</option>
  3.    <option value="01" data-fruta="fresa">Fresa  </option>
  4.    <option value="02" data-fruta="naranja">Naranja </option>
  5.    <option value="03" data-fruta="uva">Uva</option>

Código Javascript:
Ver original
  1. function x(dato)
  2. {
  3.   if (dato == "fresa")
  4.   {
  5.      alert("He logrado leer el atributo DATA!\n"+dato);
  6.   }
  7.   else
  8.   {
  9.      alert("ERROR");
  10.   }
  11. }

Esto no funciona.

Ahora, si en vez de poner this.dataset.fruta ponemos this.value, el alert sí nos muestra el valor respectivo del value. ¿Por qué con value sí, y con dataset no?


Saludos!
  #2 (permalink)  
Antiguo 07/09/2014, 10:20
Avatar de berkeleyPunk  
Fecha de Ingreso: febrero-2013
Ubicación: México :C
Mensajes: 565
Antigüedad: 11 años, 3 meses
Puntos: 22
De acuerdo Respuesta: ¿Cómo obtener valor de atributo DATA (HTML5)?

Encontré la solución. He aquí el script que funciona, que es una variación de la respuesta, encontrada en este sitio:

Código HTML:
Ver original
  1. <select id="test" onchange='x(this.value)'>
  2.         <option value="0" data-label="HongKong">Hong Kong</option>
  3.         <option value="1" data-label="China">China</option>
  4.     </select>

Código Javascript:
Ver original
  1. var select = document.getElementById('test');
  2.  
  3.         function x(dato)
  4.         {
  5.             alert( select.options[dato].getAttribute('data-label') );
  6.         }

Saludos!
  #3 (permalink)  
Antiguo 07/09/2014, 10:22
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 6 meses
Puntos: 977
Respuesta: ¿Cómo obtener valor de atributo DATA (HTML5)?

Eso sucede porque no estás tomando correctamente al valor del pseudo-atributo. Lo primero que debes de hacer es tomar a la opción seleccionada, de la siguiente manera:

Código HTML:
Ver original
  1. <select onchange="x(this.options[this.selectedIndex])">

De esta forma, dentro del array de opciones del combo, tomo a la opción seleccionada cuando se produzca el evento onchange. Para no hacerlo más largo, la toma del valor del pseudo-atributo la haremos en la función:

Código Javascript:
Ver original
  1. function x(opcion){
  2.     console.log(opcion.dataset.fruta);
  3. }

De esta manera, se mostrará el valor del pseudo-atributo de la opción seleccionada.

Saludos, Calamardo.
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #4 (permalink)  
Antiguo 07/09/2014, 15:36
Avatar de berkeleyPunk  
Fecha de Ingreso: febrero-2013
Ubicación: México :C
Mensajes: 565
Antigüedad: 11 años, 3 meses
Puntos: 22
Pregunta Respuesta: ¿Cómo obtener valor de atributo DATA (HTML5)?

Maestro, buen día.

Tu código funciona bien. Ahora, ¿mmm? ¿Entre líneas debo entender que cuando se trabaja con listas lo primero es leer el índice y luego hacer lo demás?

Saludos!
  #5 (permalink)  
Antiguo 07/09/2014, 15:43
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 6 meses
Puntos: 977
Respuesta: ¿Cómo obtener valor de atributo DATA (HTML5)?

Claro. La idea es ir en orden, en este caso, de adentro hacia afuera. Primero, hallas a la opción, luego, obtienes su valor y, finalmente, lo muestras.

Saludos
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #6 (permalink)  
Antiguo 07/09/2014, 18:14
Avatar de berkeleyPunk  
Fecha de Ingreso: febrero-2013
Ubicación: México :C
Mensajes: 565
Antigüedad: 11 años, 3 meses
Puntos: 22
Pregunta Respuesta: ¿Cómo obtener valor de atributo DATA (HTML5)?

Cita:
Iniciado por Alexis88 Ver Mensaje
Claro. La idea es ir en orden, en este caso, de adentro hacia afuera. Primero, hallas a la opción, luego, obtienes su valor y, finalmente, lo muestras...
Ok, entendido.

Una última cosa, maestro. Estoy intentando hacer que cuando se elija una opción del select se muestre un <p> con el nombre de la fruta y se oculten los otros <p>.

Como siempre, no tengo dificultad en lograr eso con uso de 1,500 if's. El problema es en hacerlo con pocas líneas de código, digamos con un bucle. Algo así:

Código HTML:
Ver original
  1. <select onchange="x(this.options[this.selectedIndex], this.value)">
  2.        <option>:: Elige una fruta ::</option>
  3.        <option value="0" data-fruta="fruta0">Naranja</option>
  4.        <option value="1" data-fruta="fruta1">Fresa</option>
  5.        <option value="2" data-fruta="fruta2">Uva</option>
  6.     </select>
  7.  
  8.     <a id="fruta0" style="display: none;">Naranja</a>
  9.     <a id="fruta1" style="display: none;">Fresa</a>
  10.     <a id="fruta2" style="display: none;">Uva</a>


Código Javascript:
Ver original
  1. function x(indice, value)
  2.        {
  3.           var propiedadData = indice.dataset.fruta;
  4.  
  5.             var miArray = new Array()
  6.             miArray[0]  = document.getElementById('fruta0');
  7.             miArray[1]  = document.getElementById('fruta1');
  8.             miArray[2]  = document.getElementById('fruta2');
  9.  
  10.  
  11.           for (var i=0; i<miArray.length; i++)
  12.           {
  13.             if (miArray[value].id != propiedadData)
  14.             {
  15.                 miArray[value].style.display = "none";
  16.             }
  17.             else
  18.             {
  19.                 miArray[value].style.display = "block";
  20.                 }
  21.           }
  22.        }

Pero, claro está, no sirve bien. ¿Me ayudas?
  #7 (permalink)  
Antiguo 07/09/2014, 21:44
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 6 meses
Puntos: 977
Respuesta: ¿Cómo obtener valor de atributo DATA (HTML5)?

Es más simple de lo que crees. Solo debes de asignar el id de cada párrafo al pseudo-atributo de cada opción, aunque sería aún más sencillo si trabajaras con el atributo value. Un ejemplo:

Código HTML:
Ver original
  1. <select onchange = "fn(this.value)">
  2.     <option>Seleccione una opción</option>
  3.     <option value = "manzana">Manzana</option>
  4.     <option value = "pera">Pera</option>
  5.     <option value = "mango">Mango</option>
  6.  
  7. <p id = "manzana">Manzana</p>
  8. <p id = "pera">Pera</p>
  9. <p id = "mango">Mango</p>

Código CSS:
Ver original
  1. p{
  2.     opacity: 0;
  3.     position: absolute;
  4.     transition: .5s;
  5. }

Código Javascript:
Ver original
  1. var parrafos = document.getElementsByTagName("p"),
  2.     total = parrafos.length;
  3.  
  4. function fn(id){
  5.     for (var i = 0; i < total; i++){
  6.         if (parrafos[i].id == id){
  7.             parrafos[i].style.opacity = 1;
  8.         }
  9.         else{
  10.             parrafos[i].style.opacity = 0;
  11.         }
  12.     }
  13. }

Lo que hago es simple. A cada opción del combo, le asigno el id de cada párrafo, desvanezco a estos últimos y en el código JavaScript, tomo a todos los párrafos y, en la función, itero sobre ese conjunto de párrafos. En cada iteración, comparo el valor seleccionado con el id de cada opción; si son iguales, muestro al párrafo, caso contrario, lo oculto. De esta forma, da igual si tienes una, tres o mil opciones, siempre funcionará.

DEMO

Saludos
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #8 (permalink)  
Antiguo 08/09/2014, 05:54
Avatar de berkeleyPunk  
Fecha de Ingreso: febrero-2013
Ubicación: México :C
Mensajes: 565
Antigüedad: 11 años, 3 meses
Puntos: 22
De acuerdo Respuesta: ¿Cómo obtener valor de atributo DATA (HTML5)?

Cita:
Iniciado por Alexis88 Ver Mensaje
Es más simple de lo que crees...
Jaajaja! Increible!, realmente es tan sencillo como dices ! Hace un tiempo, no sé, digamos 1 año, saqué de la biblioteca un libro de Javascript, le di un par de hojeadas y vamos, eso fue mi instrucción académica al respecto .

Todo lo demás, lo poquillo que he aprendido, es gracias a la red. Pero imagino que ha de haber por ahí alguna bibliografía que te conduzca a prácticas comunes o buenas prácticas en Javascript. ¿Tienes por ahí a la mano alguna referencia al respecto, que nos evite crear la rueda (como yo) y más bien tomar prácticas reconocidas que solucionen problemas básicos o comunes? ¿O es que eso, simplemente, te lo da la experiencia?


Saludos!

Última edición por berkeleyPunk; 08/09/2014 a las 05:59
  #9 (permalink)  
Antiguo 08/09/2014, 09:27
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 6 meses
Puntos: 977
Respuesta: ¿Cómo obtener valor de atributo DATA (HTML5)?

Pues, siendo sincero, todo lo que suelo explicar en este foro (y que creo que aún es poco) lo he aprendido trabajando, ayudando por acá y con manuales y ejemplos en la red. El único libro que leí sobre JavaScript es el de Fundamentos de jQuery de Rebecca Murphey. Ahora estoy leyendo 'Secrets of the JavaScript Ninja' de John Resig, hay buena teoría. Hay otros dos de los que he leído muy buenos comentarios: 'JavaScript: The Good Parts' y 'JavaScript: The Definitive Guide'. Sería cuestión de que los busques y leas. De más está decirte que, con la práctica, lograrás desarrollar aún más tus conocimientos, como sucede con todo en la vida.

Por cierto, hay otra solución aún más corta para lo que buscas, solo que no funcionará en navegadores anteriores a IE9.

Código Javascript:
Ver original
  1. var parrafos = document.querySelectorAll("p");
  2. function fn(id){
  3.     [].forEach.call(parrafos, function(parrafo){
  4.         parrafo.style.opacity = parrafo.id == id ? 1 : 0;
  5.     });
  6. }

Saludos
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand

Última edición por Alexis88; 08/09/2014 a las 15:32 Razón: Se me olvidó completar el código
  #10 (permalink)  
Antiguo 08/09/2014, 21:41
Avatar de berkeleyPunk  
Fecha de Ingreso: febrero-2013
Ubicación: México :C
Mensajes: 565
Antigüedad: 11 años, 3 meses
Puntos: 22
De acuerdo Respuesta: ¿Cómo obtener valor de atributo DATA (HTML5)?

Cita:
Iniciado por Alexis88 Ver Mensaje
...Por cierto, hay otra solución aún más corta para lo que buscas...
Cuando tenga tiempo, me voy a dar nuevamente una vuelta a la biblioteca y repasar los libros que encuentre sobre Javascript, para sacarles más provecho. Por lo demás, me quedo con la otra solución que diste.

Saludos, maestro, y hasta pronto!

Etiquetas: Ninguno
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 14:05.