В HTML разрешено добавлять свои, пользовательские
атрибуты тегам. Такие атрибуты должны начинаться
с data-
, а затем должно идти любое
название атрибута, которое вам удобно.
Пользовательские атрибуты могут быть использованы огромным количеством различных способов. Многие из этих способов мы изучим далее в учебнике, а еще больше вы сможете в дальнейшем изобрести самостоятельно.
Обращение к таким атрибутам устроено не стандартным
образом. Нельзя просто обратиться к одноименному
свойству элемента, как мы делали это раньше,
а следует использовать специальное свойство
dataset
, после которого через точку
пишется имя атрибута без data-
. Например,
если наш атрибут называется data-test
,
то для обращения к нему мы будем писать elem.dataset.test
,
где elem
- переменная с нашим элементом.
Давайте посмотрим на примере. Пусть у нас дан вот такой элемент:
<div id="elem" data-num="1000"></div>
Выведем на экран значение его атрибута data-num
:
let elem = document.querySelector('#elem');
alert(elem.dataset.num); // выведет 1000
А теперь присвоим этому атрибуту другое значение:
let elem = document.querySelector('#elem');
elem.dataset.num = 123;
Дан следующий код:
<div id="elem" data-text="str">text</div>
Сделайте так, чтобы по клику на див в конец
его текста добавилось содержимое его атрибута
data-text
.
Даны дивы, содержащие в атрибуте data-num
свой порядковый номер:
<div data-num="1">text</div>
<div data-num="2">text</div>
<div data-num="3">text</div>
<div data-num="4">text</div>
<div data-num="5">text</div>
Сделайте так, чтобы по клику на любой из дивов ему в конец записывался его порядковый номер.
Дана кнопка. Сделайте так, чтобы эта кнопка считала количество кликов по ней, записывая их в какой-нибудь пользовательский атрибут. Пусть по двойному клику на эту кнопку на экран выводится, сколько кликов по этой кнопке было сделано.
Дан инпут:
<input id="elem" data-length="5">
В этом инпуте в атрибуте data-length
содержится количество символов, которое нужно
ввести в инпут. Сделайте так, чтобы по потери
фокуса, если количество введенных символов
не совпадает с заданным, выводилось сообщение
об этом.
Дан инпут:
<input id="elem" data-min="5" data-max="10">
В этом инпуте атрибуты data-min
и
data-max
содержат диапазон. Сделайте
так, чтобы по потери фокуса, если количество
введенных символов не попадает в этот диапазон,
выводилось сообщение об этом.
Имена с дефисами
Пользовательские атрибуты могут содержать дефисы в своем названии, например, вот так:
<div id="elem" data-my-test="1000"></div>
Для обращения к таким атрибутам следует использовать camelCase:
let elem = document.querySelector('#elem');
alert(elem.dataset.myTest);
Дан следующий код:
<div id="elem" data-product-price="1000" data-product-amount="5">
товар яблоки
</div>
Сделайте так, чтобы по клику на див в конец его текста добавлялась стоимость покупки, равная цене, умноженной на количество.
Обращение через методы
К пользовательским атрибутам можно также
обращаться с помощью методов типа getAttribute
,
в этом случае следует писать полное название
атрибута:
<div id="elem" data-num="1000" data-my-num="2000"></div>
let elem = document.querySelector('#elem');
alert(elem.getAttribute('data-num')); // выведет 1000
alert(elem.getAttribute('data-my-num')); // выведет 2000
Даны абзацы. Переберите их циклом и каждому
абзацу в атрибут data-num
запишите
порядковый номер этого абзаца. Используйте
метод setAttribute
.