Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Как заменить значение data атрибута в ссылке? (https://javascript.ru/forum/jquery/57510-kak-zamenit-znachenie-data-atributa-v-ssylke.html)

ligisayan 06.08.2015 17:33

Как заменить значение data атрибута в ссылке?
 
Всем привет. Хочу заменить значение атрибута 'data-quantity' в ссылке. Как это сделать? через val, html, text, data("data-quantity", number), msglist.setAttribute("data-quantity", number) не получается..
var number = 3;
$('a').attr('data-quantity').val(number);

<a href="#" data-quantity="1">Купить</a>

Decode 06.08.2015 17:46

$('a').attr('data-quantity', number);

рони 06.08.2015 18:07

jquery
$(elem).data("quantity", number) записать
var number = $(elem).data("quantity") прочитать
js
elem.dataset.quantity = number записать
var number = elem.dataset.quantity прочитать

ligisayan 06.08.2015 18:17

Да, спасибо, я уже и сам справился
$('a').data('quantity',number);

, только непонятно почему не подходят getAttribute и setAttribute или я не умею ими пользоваться
просто через js меняется, а в html коде по-прежнему остается quantity изначальный..

рони 06.08.2015 18:33

Цитата:

Сообщение от ligisayan
msglist.setAttribute

msglist это у вас 1 элемент или несколько?

ligisayan 07.08.2015 09:55

Цитата:

Сообщение от рони (Сообщение 382987)
msglist это у вас 1 элемент или несколько?

один. это название такое возможно неудачное

рони 07.08.2015 13:14

ligisayan,
тогда должно работать если точно один а не nodeList с одним элементом

ligisayan 07.08.2015 20:39

Цитата:

Сообщение от рони (Сообщение 383073)
ligisayan,
тогда должно работать если точно один а не nodeList с одним элементом

вообщем как я понял data меняет код js, а setAttribute html и все работают только до перезагрузки

рони 08.08.2015 13:57

Цитата:

Сообщение от ligisayan
все работают только до перезагрузки

:blink:

laimas 09.08.2015 08:05

Цитата:

Сообщение от ligisayan
вообщем как я понял data меняет код js, а setAttribute html и все работают только до перезагрузки

Метод .data() jQuery вообще не имеет отношения к атрибуту элемента data-var когда речь идет об установке этим методом какой либо переменной.

Если у элемента есть атрибут data-var, то метод element.data('var') вернет значение этого атрибута (начиная с версии jQuery 1.4.3). При этом, если значение этого атрибута корректная json-строка, то метод сразу преобразует это значение в объект, например, если data-var="[2,3]", то .data('var') вернет массив. В случае, если имя атрибута будет иметь более сложное сочетание через дефис, типа data-var-name, то получить его можно в camelCase: element.data('varName').

Но записать/изменить значение в data-var метод .data('var', value) не может, вместо этого он создаст переменную var со значением value, которая будет привязана к элементу, для которого был вызван этот метод (можно привязать к элементу и несколько переменных .data({var1: value1, var2: value2, ....}) ). Для этого и предназначен данный метод. Удалить эту переменную у элемента можно методом .removeData(). А вот метод javascript setAttribute будет изменять значение именно атрибута.

Вот так это выглядит:

<!DOCTYPE HTML> 
<html> 
<head> 
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
<script> 
$(function() {
    var p = $('p');
    //получили значение атрибута
    alert(p.data('var'));
    //думаем, что изменяем его
    p.data('var', 55);
    //радуемся
    alert(p.data('var'));
    //а на самом деле воз и ныне там
    alert(p[0].getAttribute('data-var'));
});
</script>     
</head> 
<body>
<p data-var="22">Text</p>
</body> 
</html>

После того как элемент получил собственную jq-перменную "var" .data('var') будет обращаться уже к ней, а не к атрибуту data-var элемента.


Часовой пояс GMT +3, время: 07:47.