Могу ли я иметь несколько значений в одном элементе HTML "data-"?

Могу ли я иметь несколько значений в одном элементе "data-" HTML? Подобно тому, как класс может иметь несколько имен классов.

Если возможно, я хотел бы создать библиотеку CSS/JS, которая использует один элемент "data-" для размещения всех стилей библиотеки. Например:

<div data-library-name="xs-hidden col-md-10 col-xl-8 big-hero"></div>

Таким образом, любой из правил пользовательского стиля программистов может войти в класс элементов. Мое рассуждение заключается в том, чтобы упростить читаемость, поэтому вместе это выглядело бы так:

<div class="custom-style another-style" data-library-name="xs-hidden col-md-10 col-xl-8 big-hero"></div>

Ответы

Ответ 1

Могу ли я иметь несколько значений в одном элементе "data-" HTML?

У вас может быть строка. Спецификация не определяет какой-либо конкретный формат для данных в атрибуте, который предназначен для обработки JavaScript на основе сайта.

Аналогично тому, как класс может иметь несколько имен классов.

Атрибут class принимает список разделенных пробелами классов.

Ваш JavaScript может your_data_attribute_value.split(" ");, если хотите.

Обработка этого с помощью CSS будет использовать селектор атрибутов ~= .

[ATT ~ = значение]
Представляет элемент с атрибутом att, значение которого представляет собой список слов, разделенных пробелами, один из которых является точно "val" . Если "val" содержит пробелы, он никогда не будет представлять ничего (поскольку слова разделены пробелами). Также, если "val" - это пустая строка, она никогда ничего не представит.

Ответ 2

AFAIK, я не думаю, что атрибуты data- могут преобразовать это в массив. Вместо этого я думаю, что он будет интерпретировать его как одно значение, но это разрешено.

Если вы захотите это сделать, вам, вероятно, придется split() использовать его позже в JavaScript в массив доступных значений.

Смотрите этот пример на JSFiddle.net.

Ответ 3

У CSS есть ярлык .class, но он фактически разбирает атрибут с именем "класс" в качестве списка для значений, разделенных пробелами. Это поддерживается в форме без ярлыков следующим селектором атрибутов:

[att~=val]

Представляет элемент с атрибутом att, значение которого представляет собой список слов, разделенных пробелами, один из которых является точно "val" . Если "val" содержит пробел, он никогда не будет представлять ничего (поскольку слова разделены пробелами). Если "val" - это пустая строка, она никогда не представит ничего.

Ссылка: http://www.w3.org/TR/CSS2/selector.html#class-html

Как ваш вопрос помечен CSS, вы, возможно, ищете это. Правила того, как выполняется синтаксический анализ значений атрибутов, также указывается в этом документе, поэтому в случае, если библиотека javascript, которую вы пытаетесь использовать на этом (если есть), не будет охватывать это, добавить:

var list = $("div").data("library-name").split(/\s+/);
                                         ^^^^^^^^^^^^

Этот раскол с регулярным выражением белого пространства анализирует значение атрибута строки в массиве с javascript и библиотекой JQuery (для доступа к DOM и атрибуту data).