green $('button.setprice').click(function() { var txt = $(this).text(); $('.price').text(txt).attr('data-price', txt); }); $('.check').on('click',function(){ alert($('.price').data('price')) }); .setprice { background: green; } <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <div class="price"></div> <button class="setprice">1000</button> <button class="setprice">2000</button> <br/> <button class="check">check price</button>Aparentemente, no puede mezclar data() y attr() . Está bien explicado en esta respuesta: https://stackoverflow.com/a/8708345/3785618
Dado que
.data()realiza un procesamiento adicional, jQuery almacena los resultados de la evaluación de atributos en$.cache; después de todo, una vez que se ha evaluado un atributo de datos, sería un desperdicio volver a evaluar cada llamada de.data(), especialmente porque las variables de datos puede contener cadenas JSON complejas.
Aunque, esto funcionará:
$('button.setprice').click(function() { var txt = $(this).text(); $('.price').text(txt).data('price', txt); }); $('.check').on('click',function(){ alert($('.price').data('price')) }); .setprice { background: green; } <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <div class="price"></div> <button class="setprice">1000</button> <button class="setprice">2000</button> <br/> <button class="check">check price</button>