Вы можете использовать JSON.parse
, если немного измените синтаксис значения этого атрибута, добавив фигурные скобки и экранированные кавычки ("
):
const slider = document.getElementById('slider');
console.log(JSON.parse(`${ slider.dataset.options }`));
<div id="slider" data-options="{ "container": "value", "speed": 1000, "edgePadding": 45, "lazyload": true }">
Другой альтернативой, которая выглядит лучше, будет использование одинарных кавычек '
и eval()
:
const slider = document.getElementById('slider');
console.log(eval(`(${ slider.dataset.options })`));
<div id="slider" data-options="{ 'container': 'value', 'speed': 1000, 'edgePadding': 45, 'lazyload': true }">
Или просто проанализируйте значение атрибута самостоятельно:
const slider = document.getElementById('slider');
const options = {};
slider.dataset.options.split(',').forEach((pair) => {
const [key, value] = pair.split(':');
options[key.trim()] = value.trim();
});
console.log(options);
<div id="slider" data-options="container: value, speed: 1000, edgePadding: 45, lazyload: true">
Более сложная логика синтаксического анализа:
const slider = document.getElementById('slider');
const options = {};
slider.dataset.options.split(',').forEach((pair) => {
const [key, value] = pair.split(':');
let parsedValue = value.trim();
if (!isNaN(parsedValue)) {
options[key.trim()] = +parsedValue;
} else if (parsedValue === 'true' || parsedValue === 'false') {
options[key.trim()] = parsedValue === 'true';
} else {
options[key.trim()] = parsedValue;
}
});
console.log(options);
<div id="slider" data-options="container: value, speed: 1000, edgePadding: 45, lazyload: true">