¿Cómo obtener el atributo data-id?
Frecuentes
Visto 1,787 equipos
919
Estoy usando el complemento de arenas movedizas de jQuery. Necesito obtener la identificación de datos del elemento en el que se hizo clic y pasarlo a un servicio web. ¿Cómo obtengo el atributo data-id? Estoy usando el .on()
método para volver a vincular el evento de clic para elementos ordenados.
$("#list li").on('click', function() {
// ret = DetailsView.GetProject($(this).attr("#data-id"), OnComplete, OnTimeOut, OnError);
alert($(this).attr("#data-id"));
});
<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js"></script>
<ul id="list" class="grid">
<li data-id="id-40" class="win">
<a id="ctl00_cphBody_ListView1_ctrl0_SelectButton" class="project" href="#">
<img src="themes/clean/images/win.jpg" class="project-image" alt="get data-id" />
</a>
</li>
</ul>
15 Respuestas
1810
Para obtener el contenido del atributo data-id
(como en <a data-id="123">link</a>
) tienes que usar
$(this).attr("data-id") // will return the string "123"
or .data()
(si usa jQuery más reciente> = 1.4.3)
$(this).data("id") // will return the number 123
y la parte posterior data-
debe estar en minúsculas, p. ej. data-idNum
no funcionará, pero data-idnum
lo hará.
Respondido 16 Oct 17, 10:10
Tuve que usar attr()
porque jQuery estaba quitando los ceros iniciales de los códigos postales usando data()
, TFM dice "A partir de jQuery 1.4.3 HTML 5, los atributos de datos se incorporarán automáticamente al objeto de datos de jQuery. ... Se hace todo lo posible para convertir la cadena en un valor de JavaScript (esto incluye booleanos, números, objetos, matrices y nulos ). Un valor solo se convierte en un número si hacerlo no cambia la representación del valor. Por ejemplo, "1E02" y "100.000" son equivalentes como números (valor numérico 100), pero convertirlos alteraría su representación, por lo que son a la izquierda como cadenas ". - Wesley Murch
Esto está regresando 'indefinido' para mí. - para siempre
Si bien es obvio para algunos, creo que vale la pena señalar para aquellos que tuvieron problemas con esto que al usar .attr () el texto dentro de los corchetes debe coincidir con lo que haya establecido como su atributo de datos personalizado. es decir, si el atributo de datos personalizados es volumen de datos, debes hacer referencia a él usando .attr ("volumen de datos"). Y, con jQuery 1.4.3 hacia arriba y usando .data (), el texto dentro de los corchetes debe coincidir con su atributo de datos personalizado sin al datos- prefijo. es decir, si el atributo de datos personalizados es volumen de datos, debes hacer referencia a él usando .data ("volumen"). - Lucas
Para aquellos que informan que no funciona, asegúrese de que su atributo contenga solo letras minúsculas. Por ejemplo, "data-listId" debe ser "data-listid". Ver stackoverflow.com/questions/10992984/… por la razón por la cual. - Campanas de viento
or $(this).data().id //returns 123
- dem pilafian
191
Si deseamos recuperar o actualizar estos atributos usando existentes, nativos JavaScript, entonces podemos hacerlo usando los métodos getAttribute y setAttribute como se muestra a continuación:
A través de JavaScript
<div id='strawberry-plant' data-fruit='12'></div>
<script>
// 'Getting' data-attributes using getAttribute
var plant = document.getElementById('strawberry-plant');
var fruitCount = plant.getAttribute('data-fruit'); // fruitCount = '12'
// 'Setting' data-attributes using setAttribute
plant.setAttribute('data-fruit','7'); // Pesky birds
</script>
A través de jQuery
// Fetching data
var fruitCount = $(this).data('fruit');
OR
// If you updated the value, you will need to use below code to fetch new value
// otherwise above gives the old value which is intially set.
// And also above does not work in ***Firefox***, so use below code to fetch value
var fruitCount = $(this).attr('data-fruit');
// Assigning data
$(this).attr('data-fruit','7');
Respondido 16 Feb 16, 04:02
Ha mencionado que cuando use jQuery para actualizar los datos, tendremos que usar la función .attr ('data-fruit') para obtener los "datos" actualizados, ¡y esa es la parte muy útil para mí! muchas gracias - Hicham O-Sfh
104
Nota IMPORTANTE. Tenga en cuenta que si ajusta el data-
atributo dinámicamente a través de JavaScript NO se reflejará en el data()
Función jQuery. Tienes que ajustarlo a través de data()
funcionar también
<a data-id="123">link</a>
js:
$(this).data("id") // returns 123
$(this).attr("data-id", "321"); //change the attribute
$(this).data("id") // STILL returns 123!!!
$(this).data("id", "321")
$(this).data("id") // NOW we have 321
contestado el 29 de mayo de 15 a las 16:05
Buen punto ... ¿hay una actualización de datos (). Para actualizar los datos de los atributos? - Harag
Es un punto importante para cambiar y acceder al valor del atributo de datos de forma dinámica. - motahar hossain
62
Si no le preocupan los antiguos navegadores IE, también puede utilizar API de conjunto de datos HTML5
HTML
<div id="my-div" data-info="some info here" data-other-info="more info here">My Awesome Div</div>
JS
var myDiv = document.querySelector('#my-div');
myDiv.dataset.info // "some info here"
myDiv.dataset.otherInfo // "more info here"
Demostración: http://html5demos.com/dataset
Lista completa de compatibilidad con navegadores: http://caniuse.com/#feat=dataset
respondido 01 nov., 14:09
23
Sorprendido que nadie mencionó:
<select id="selectVehicle">
<option value="1" data-year="2011">Mazda</option>
<option value="2" data-year="2015">Honda</option>
<option value="3" data-year="2008">Mercedes</option>
<option value="4" data-year="2005">Toyota</option>
</select>
$("#selectVehicle").change(function () {
alert($(this).find(':selected').data("year"));
});
Aquí está el ejemplo de trabajo: https://jsfiddle.net/ed5axgvk/1/
Respondido 20 ago 16, 08:08
Muy buena respuesta. Muchas gracias. - Paciencia ruberandinda
Es bueno ver uno que realmente funciona, y en un violín que realmente funciona. Demasiadas otras 'respuestas' sobre este tema no funcionan correctamente cuando se intentan porque no se proporciona un contexto y, a veces, la sintaxis de la "respuesta" es completamente incorrecta. Gracias. - McAuley
15
HTML
<span id="spanTest" data-value="50">test</span>
JS
$(this).data().value;
or
$("span#spanTest").data().value;
RESPUESTA: 50
¡Funciona para mi!
contestado el 19 de mayo de 16 a las 07:05
13
Acceder al atributo de datos con su propio id
es un poco fácil para mí.
$("#Id").data("attribute");
function myFunction(){
alert($("#button1").data("sample-id"));
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button type="button" id="button1" data-sample-id="gotcha!" onclick="myFunction()"> Clickhere </button>
Respondido 27 Jul 18, 17:07
Otro ejemplo que realmente funciona. Este hilo está en racha. Gracias Aravindh y Zakaria. - McAuley
12
Yo uso $ .data - http://api.jquery.com/jquery.data/
//Set value 7 to data-id
$.data(this, 'id', 7);
//Get value from data-id
alert( $(this).data("id") ); // => outputs 7
Respondido 21 Oct 14, 14:10
12
var id = $(this).dataset.id
¡funciona para mi!
contestado el 26 de mayo de 15 a las 22:05
9
Este fragmento de código devolverá el valor de los atributos de datos, por ejemplo: id de datos, tiempo de datos, nombre de datos, etc., lo he mostrado para el id.
<a href="#" id="click-demo" data-id="a1">Click</a>
js:
$(this).data("id");
// obtiene el valor del id de datos -> a1
$(this).data("id", "a2");
// esto cambiará el ID de datos -> a2
$(this).data("id");
// obtiene el valor del id de datos -> a2
respondido 26 mar '18, 15:03
Lindo. Pero si agrega algo de contexto a su javascript, incluso sin un violín, realmente mejoraría la claridad de la respuesta, al menos para mí. Algo como $ ("# click-demo"). On ('click', function () {alert ($ (this) .data ("id")); $ (this) .data ("id", "a2 "); alert ($ (this) .data (" id "));}) - McAuley
5
usando jQuery:
$( ".myClass" ).load(function() {
var myId = $(this).data("id");
$('.myClass').attr('id', myId);
});
Respondido 18 ago 17, 22:08
4
Intente
this.dataset.id
$("#list li").on('click', function() {
alert( this.dataset.id );
});
<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js"></script>
<ul id="list" class="grid">
<li data-id="id-40" class="win">
<a id="ctl00_cphBody_ListView1_ctrl0_SelectButton" class="project" href="#">
<img src="themes/clean/images/win.jpg" class="project-image" alt="get data-id >>CLICK ME<<" />
</a>
</li>
</ul>
Respondido el 10 de junio de 20 a las 14:06
2
El problema es que no está especificando la opción o la opción seleccionada de menú desplegable o lista. Aquí hay un ejemplo de menú desplegable, estoy asumiendo un registro de datos de atributos de datos.
$('#select').on('change', function(){
let element = $("#visiabletoID");
element.val($(this).find(':selected').data('record'));
});
Respondido 30 ago 20, 22:08
0
Para aquellos que buscan quitar y volver a habilitar dinámicamente la información sobre herramientas, puede usar el dispose
y enable
métodos. Ver https://getbootstrap.com/docs/4.0/components/tooltips/#tooltipdispose
Respondido 15 ago 19, 19:08
0
Tengo un lapso. Quiero tomar el valor del atributo data-txt-lang, que se usa definido.
$(document).ready(function ()
{
<span class="txt-lang-btn" data-txt-lang="en">EN</span>
alert($('.txt-lang-btn').attr('data-txt-lang'));
});
Respondido el 10 de diciembre de 19 a las 06:12
No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas javascript html jquery custom-data-attribute or haz tu propia pregunta.
Aviso para nuevos visitantes: el método .live () de JQuery ha quedado obsoleto en favor de .on () - dendini
Debe eliminar el # de la alerta, no lo necesita :-) - Becs Carter
attr ("# data-id")) es incorrecto. corregido: attr ("data-id")); - nh-labs
@BruceAdams, puede valer la pena editar la pregunta para usar el
on()
método comolive()
ahora está en desuso, y esta pregunta recibe bastantes visitantes. - Rory McCrossan