Не удается обновить значение атрибута данных


хотя есть некоторые примеры об этом в интернете, это, кажется, не работает правильно. Я не могу понять, в чем проблема.

у меня есть этот простой html

         <div id="foo" data-num="0"></ div>
         <a href="#" id="changeData">change data value</a>

каждый раз, когда я нажимаю ссылку "Изменить значение данных", я хочу обновить значение данных data-num. Например мне нужно 1,2,3,4,... (плюс 1 каждый раз, когда я нажимаю на ссылку)

у меня есть

            var num = $('#foo').data("num");
            console.log(num);
            num = num+1;               
            console.log(num);
            $('#foo').attr('data-num', num);   

значение изменяется один раз от 0 до 1 каждый раз. Я не могу сделать это очень важно. Любые предложения, что я делаю неправильно?

7 64

7 ответов:

EDIT: ответ чуть ниже является хорошим.

вы не используете способ данных правильно. Правильный код для обновления данных:

$('#foo').data('num', num); 

Так что ваш пример будет выглядеть так:

var num = $('#foo').data("num") + 1;       
console.log(num)       
$('#foo').data('num', num); 
console.log(num)

использовать, что вместо Если вы хотите изменить атрибут data-num элемента узла, а не объекта данных:

демо

$('#changeData').click(function (e) { 
    e.preventDefault();
    var num = +$('#foo').attr("data-num");
    console.log(num);
    num = num + 1;
    console.log(num);
    $('#foo').attr('data-num', num);
});

PS: но вы должны использовать объект data() практически во всех случаях, но не во всех...

если мы хотим получить или обновить эти атрибуты, используя существующие, уроженца JavaScript, то мы можем сделать это с помощью getAttribute и setAttribute методы, как показано ниже:

JavaScript

<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>

через jQuery

// Fetching data
var fruitCount = $(this).data('fruit');

// Above does not work in firefox. So use below to get attribute value.
var fruitCount = $(this).attr('data-fruit');

// Assigning data
$(this).data('fruit','7');

// But when you get the value again, it will return old value. 
// You have to set it as below to update value. Then you will get updated value.
$(this).attr('data-fruit','7'); 

прочитайте эту документацию для vanilla js или эта документация для jquery

для себя, используя jQuery lib 2.1.1 следующее не работает так, как я ожидал:

установить значение атрибута элемента данных:

$('.my-class').data('num', 'myValue');
console.log($('#myElem').data('num');// as expected = 'myValue'

но сам элемент остается без атрибутов:

<div class="my-class"></div>

мне нужно было обновить DOM, чтобы я мог позже сделать $('. my-class[data-num= "myValue"]') / / текущая длина равна 0

так что я должен был сделать

$('.my-class').attr('data-num', 'myValue');

чтобы получить DOM для обновления:

<div class="my-class" data-num="myValue"></div>

существует ли атрибут или не.$ attr, который будет перезаписывать.

была аналогичная проблема, и в конце концов мне пришлось установить оба

obj.attr('data-myvar','myval')

и

obj.data('myvar','myval')

и после этого

obj.data('myvar') == obj.attr('data-myvar')

надеюсь, что это помогает.

этот ответ для тех, кто стремится просто изменить значение атрибута данных

предложенное не изменит значение ваших данных Jquery-attr правильно, как заявил @adeneo. По какой-то причине я не вижу, чтобы он (или любые другие) опубликовал правильный метод для тех, кто хочет обновить свои данные-attr. Ответ ,который @ Lucas Willems опубликовал, может быть ответом на проблему Brian Tompsett-having имеет, но это не ответ на запрос, который может приведите сюда других пользователей.

быстрый ответ в отношении первоначального заявления дознания

- для обновления данных-attr

$('#ElementId').attr('data-attributeTitle',newAttributeValue);

легкие ошибки* - там должны быть" данные - " в начале вашего атрибута вы хотите изменить значение.

была аналогичная проблема, я предлагаю это решение, хотя оно не поддерживается в IE 10 и ниже.

дано

<div id='example' data-example-update = '1' ></div>

стандарт Javascript определяет свойство dataset для обновления данных-пример-обновление.

document.getElementById('example').dataset.exampleUpdate = 2;

Примечание: используйте обозначение случая верблюда для доступа к правильному атрибуту данных.

Источник: https://developer.mozilla.org/en-US/docs/Learn/HTML/Howto/Use_data_attributes