2012-04-04 14 views
20

Tengo el siguiente en mi HTML fuente:¿Cómo puedo obtener un valor de datos HTML como una cadena con jQuery?

<li><a href="#" data-value="01">Test</a></li> 

Quiero obtener el valor de los datos de atributos, así que estoy usando lo siguiente:

var abc = $(this).data('value'); 

Esto funciona bien, pero si no hay un cero a la izquierda. Por ejemplo, el anterior coloca el valor "1" en abc.

¿Hay alguna manera de que pueda obtenerlo para no convertir el "01" en "1"?

+0

posible duplicado de [datos HTML y una cadena que se parece a un número] (http://stackoverflow.com/questions/7912601/html-data-and-a-string-the-looks-like-a-number) – j08691

+0

No sé si 'data-value' es un atributo correcto de un elemento' '. ¿No sería mejor usar el atributo 'rel'? – JakeJ

+1

@JakeJ - Ver http: // ejohn.org/blog/html-5-data-attributes/ – j08691

Respuesta

38
this.dataset.value; 

// Or old school 
this.getAttribute('data-value'); 

const a = document.querySelector("a"); 
 
console.log('Using getAttribute, old school: ', a.getAttribute('data-value')); 
 
console.log('Using dataset, conforms to data attributes: ', a.dataset.value);
<ul> 
 
    <li><a href="#" data-value="01">Test</a></li> 
 
</ul>

Gracias a @MaksymMelnyk para las cabezas para arriba en dataset

+7

+1 por no usar jQuery cuando no es absolutamente necesario. –

+0

Gracias, Florian, por lo general prefiero responder con JS directo, si es posible. Sin embargo, si el OP ya está usando jQuery, 'attr' puede ser una mejor opción, ya que getAttribute puede tener errores en los navegadores en algunos casos extremos, como cuando el atributo es uno que DOM usa, como' obj.disabled' . –

+0

Bueno, puedes usar 'this.dataValue' luego :) No conozco ningún error al respecto. –

15

Usted puede utilizar el operador attr() de jQuery:

var abc = $(this).attr('data-value'); 
4
$(this).attr('data-value'); 

Esto devolverá el valor de cadena con el 0 inicial

2

has necesitado ?:

$(this).attr('data-value'); 

o

$(this).attr('data-value').toString(); 
+1

'$ .attr' no necesita' toString', ya devuelve una cadena, incluso si no lo hizo, al llamar 'toString' no se devolvería la cadena original si ya se había convertido a un número. –

12

Desde el jQuery data() documentation, parece que usted tiene que utilizar .attr() para evitar la conversión automática de tipo:

Se hace todo lo posible para convertir la cadena a un valor de JavaScript (esto incluye booleanos, números, objetos, matrices y nulo); de lo contrario, se deja como una cadena. Para recuperar el atributo del valor como una cadena sin ningún intento de convertirlo, use el método attr(). Cuando el atributo de datos es un objeto (comienza con '{') o una matriz (comienza con '['), jQuery.parseJSON se usa para analizar la cadena; debe seguir la sintaxis JSON válida, incluidos los nombres de las propiedades entre comillas. Los atributos de datos se obtienen la primera vez que se accede a la propiedad de los datos y luego ya no se accede a ellos ni se los muda (todos los valores de los datos se almacenan internamente en jQuery).

Por lo tanto, no duplicar otras respuestas, sino más bien para reforzar, la forma de acceder al atributo sin hacer la conversión de tipos es:

var abc = $(this).attr('data-value'); 
1

Probar:

this.data('value'); 

creo que este es la mejor forma de obtener el valor del atributo de datos.

Cuestiones relacionadas