aboutsummaryrefslogtreecommitdiff
path: root/files/ru/web/api/htmlorforeignelement/dataset/index.html
blob: 1cde2aaa6f36ea3048151a28cf7875b77529d80c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
---
title: HTMLElement.dataset
slug: Web/API/HTMLOrForeignElement/dataset
translation_of: Web/API/HTMLOrForeignElement/dataset
original_slug: Web/API/HTMLElement/dataset
---
<p>{{ APIRef("HTML DOM") }}</p>

<p>Свойство <code><strong>HTMLElement.dataset</strong></code> предоставляет доступ как для чтения, так и для изменения всех пользовательских дата-атрибутов <a href="/en/HTML/Global_attributes#attr-data-*" title="https://developer.mozilla.org/en/HTML/Global_attributes#attr-data-*">custom data attributes</a> (<code>data-*</code>) , установленных у элемента. Это <a href="/en/DOM/DOMStringMap" title="en/DOM/DOMStringMap">map of DOMString</a>, одна запись для каждого пользовательского атрибута данных. Обратите внимание, свойство <code><strong>dataset</strong></code> доступно только для чтения. Для записи должны использоваться  его "свойства", которые представлены data-атрибутами. Также обратите внимание, что HTML <code><strong>data-</strong></code><em>атрибут</em> и соответствующий ему DOM-<code>dataset.</code><em>property</em> не имеют одно и то же имя, но они всегда похожи:</p>

<ul>
 <li>Имя пользовательского дата атрибута в HTML начинается с "<code>data-</code>". Оно может состоять из букв, цифр и символов: дефис-минус (<code>-</code>, <code>U+002D</code>), точка (<code>.</code>), двоеточие (<code>:</code>), подчёркивание (<code>_</code>). Имя НЕ МОЖЕТ включать в себя заглавные буквы.</li>
 <li>Имя пользовательского дата-атрибута в Javascript — это имя того же атрибута в HTML, но с использованием нотации camelCase и без дефисов, точек и т.д.<br>
  <br>
  В дополнение к приведённой ниже информации вы найдёте руководство по использованию HTML data-атрибутов в нашей статье <a href="/en-US/docs/Learn/HTML/Howto/Use_data_attributes">Использование data-атрибутов</a>.</li>
</ul>

<h3 id="Преобразование_имён">Преобразование имён</h3>

<p><code>dash-style</code> в <code>camelCase</code>: имя пользовательского дата-атрибута преобразуется в ключ для {{ domxref("DOMStringMap") }} по следующим правилам:</p>

<ul>
 <li>удаляется префикс <code>data-</code> (вместе с дефисом);</li>
 <li>дефисы (<code>U+002D</code>) со следующими за ними <span style="line-height: 1.5;">ASCII-символами </span><code>a</code><span style="line-height: 1.5;">-</span><code>z</code><span style="line-height: 1.5;"> в нижнем регистре: черта удаляется, а символ преобразуется в верхний регистр;</span></li>
 <li>остальные символы (включая дефисы) остаются без изменений.</li>
</ul>

<p><code>camelCase</code> в <code>dash-style</code>: обратное преобразование ключа в имя атрибута производится по следующим правилам:</p>

<ul>
 <li>Ограничение: сразу после дефиса не может быть ASCII-символа <code>a</code>-<code>z</code> в нижнем регистре (до преобразования);</li>
 <li>добавляется префикс <code>data-</code>;</li>
 <li>все ASCII-символы <code>A</code>-<code>Z</code> в верхнем регистре заменяются на дефис с символом в нижнем регистре;</li>
 <li>остальные символы остаются без изменений.</li>
</ul>

<p>Ограничение в правилах гарантирует, что эти два преобразования являются обратными друг другу.</p>

<p>Например, атрибуту <code>data-abc-def</code> соответствует ключ <code>abcDef</code>.</p>

<h3 id="Доступ_к_значениям">Доступ к значениям</h3>

<ul>
 <li>Атрибуты можно устанавливать и считывать по имени в camelCase (ключ) как свойство объекта dataset, например <em>element.</em>dataset.<em>keyname</em></li>
 <li>Атрибуты также можно устанавливать и считывать с использованием доступа к свойствам объекта через квадратные скобки, например <em>element.</em>dataset[<em>keyname</em>]</li>
 <li><a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/in">Оператор in</a> может быть использован для проверки существования атрибута.</li>
</ul>

<h2 id="Синтаксис">Синтаксис</h2>

<ul>
 <li><em>string</em> = <em>element</em>.<strong>dataset</strong>.<em>camelCasedName</em>;</li>
 <li><em>element.</em><strong>dataset</strong>.<em>camelCasedName</em> = <em>string</em>;</li>
 <br>
 <li><em>string</em> = <em>element</em>.<strong>dataset</strong>[<em>camelCasedName</em>];</li>
 <li><em>element</em>.<strong>dataset</strong>[<em>camelCasedName</em>] = <em>string</em>;</li>
 <br>
 <li><em>Custom data attributes can also be set directly on HTML elements, but attribute names must use the data- syntax above. </em></li>
</ul>

<h2 id="Примеры">Примеры</h2>

<pre class="brush: js notranslate">&lt;div id="user" data-id="1234567890" data-user="johndoe" data-date-of-birth&gt;John Doe&lt;/div&gt;

let el = document.querySelector('#user');

// el.id == 'user'
// el.dataset.id === '1234567890'
// el.dataset.user === 'johndoe'
// el.dataset.dateOfBirth === ''

el.dataset.dateOfBirth = '1960-10-03'; // set the DOB.

// 'someDataAttr' in el.dataset === false
el.dataset.someDataAttr = 'mydata';
// 'someDataAttr' in el.dataset === true
</pre>

<h2 id="Specifications">Specifications</h2>

<table class="standard-table">
 <tbody>
  <tr>
   <th scope="col">Specification</th>
   <th scope="col">Status</th>
   <th scope="col">Comment</th>
  </tr>
  <tr>
   <td>{{SpecName('HTML WHATWG', "dom.html#dom-dataset", "HTMLElement.dataset")}}</td>
   <td>{{Spec2('HTML WHATWG')}}</td>
   <td>No change from latest snapshot, {{SpecName('HTML5.1')}}</td>
  </tr>
  <tr>
   <td>{{SpecName('HTML5.1', "dom.html#dom-dataset", "HTMLElement.dataset")}}</td>
   <td>{{Spec2('HTML5.1')}}</td>
   <td>Snapshot of {{SpecName('HTML WHATWG')}}, no change from {{SpecName('HTML5 W3C')}}</td>
  </tr>
  <tr>
   <td>{{SpecName('HTML5 W3C', "dom.html#dom-dataset", "HTMLElement.dataset")}}</td>
   <td>{{Spec2('HTML5 W3C')}}</td>
   <td>Snapshot of  {{SpecName('HTML WHATWG')}}, initial definition.</td>
  </tr>
 </tbody>
</table>

<h2 id="Совместимость_с_браузерами">Совместимость с браузерами</h2>

<p>{{Compat("api.HTMLElement.dataset")}}</p>

<h2 id="Смотрите_также">Смотрите также</h2>

<ul>
 <li>The HTML <a href="/en-US/docs/Web/HTML/Global_attributes/data-*"><strong>data-*</strong></a> class of global attributes.</li>
 <li><a href="/en-US/docs/Learn/HTML/Howto/Use_data_attributes">Using data attributes</a></li>
</ul>