Skip to content

Instantly share code, notes, and snippets.

@ryanmorr
Last active January 30, 2024 08:44
Show Gist options
  • Save ryanmorr/1c73a7745d359820080003db9e8b0698 to your computer and use it in GitHub Desktop.
Save ryanmorr/1c73a7745d359820080003db9e8b0698 to your computer and use it in GitHub Desktop.
Pass data from an HTML script tag to JavaScript
const JSON_RE = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/;
function parseData(data) {
if (data == null || data === 'null' || data === 'undefined' || data === '') {
return null;
}
if (data === 'true') {
return true;
}
if (data === 'false') {
return false;
}
if (data === +data + '') {
return +data;
}
if (JSON_RE.test(data)) {
try {
return JSON.parse(data);
} catch(e) {}
}
return data;
}
function getScriptData(script = document.currentScript) {
const data = {};
for (let name in script.dataset) {
data[name] = parseData(script.dataset[name]);
}
return data;
}
<script data-foo="Hello World", data-bar="true" data-baz="14.5" data-qux="{&quot;foo&quot;:&quot;bar&quot;}">
const data = getScriptData();
data.foo; //=> "Hello World"
data.bar; //=> true
data.baz; //=> 14.5
data.qux; //=> {foo: "bar"}
</script>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment