ZetCode

数据集教程

最后修改于 2023 年 8 月 24 日

数据集教程演示了如何使用 dataset 属性来读取和写入自定义数据属性。

数据集

HTMLElement 接口上的 dataset 属性提供了对元素上设置的所有自定义数据属性 (data-*) 的读/写访问。这种访问在 HTML 和 DOM 中都可用。

数据集示例

下面的示例演示了 dataset 属性的用法。

index.html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <link rel="stylesheet" href="main.css">
</head>
<body>

    <h2>Reading words from a dataset</h2>

    <div data-words="coin, marble, forest, falcon, mountain"></div>

    <div id="output">...</div>
    
    <button id="read">Read</button>

    <script src="main.js"></script>
</body>
</html>

在示例中,我们在自定义 data-words 属性中有一个单词列表。按钮读取单词并将其输出到另一个 div 元素。

main.css
button {
    width: 4em; height: 2em;
}

* {
    margin: 10px 10px;
}

这是文档的一些基本样式。

main.js
let dataEl = document.querySelector("div[data-words]");
let output = document.getElementById("output");

let btn = document.getElementById("read");
btn.addEventListener('click', () => {

    let mywords = dataEl.dataset.words;
    output.innerHTML = mywords;
});

在按钮处理程序中,我们读取单词并将它们插入到输出 div 元素中。

Express 示例

在下面的示例中,我们创建了一个简单的 Web 应用程序,它将数据发送到文档。我们使用了 Express 框架和 Liquid.js 模板引擎。

$ ls -Inode_modules -R
.:
index.js  package.json  package-lock.json  public  views

./public:
main.css  main.js

./views:
home.liquid

这些是项目的内容。

index.js
const express = require("express");
const path = require("path");
const Liquid = require('liquidjs');

const engine = new Liquid();
const app = express();

app.engine('liquid', engine.express());
app.set('views', path.resolve(__dirname, "views"));
app.use("/public", express.static(__dirname + "/public"));
app.set('view engine', 'liquid');

app.get("/words", (req, res) => {

    const words = ['coin', 'marble', 'forest', 'falcon', 'mountain'];
    const data = words.join(', ');

    res.render("home", { data });
});

app.use((req, res) => {
    res.statusCode = 404;
    res.end("404 - page not found");
});

app.listen(3000, () => {

    console.log("Application started on port 3000");
})

这是一个简单的 Express 应用程序。它为 /home 请求将 home.liquid 模板发送到客户端。该模板还接收 words 数据。

app.use("/public", express.static(__dirname + "/public"));

静态资源放在 public 目录中。

views/home.liquid
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>words</title>
    <link rel="stylesheet" href="public/main.css">
</head>
<body>

    <div data-words='{{data}}'></div>

    <div id="output">...</div>
    
    <button id="read">Read</button>

    <script src="public/main.js"></script>
</body>
</html>

在模板中,我们使用 {{}} 语法将数据添加到 data-words 属性。

public/main.css
button {
    width: 4em; height: 2em;
}

* {
    margin: 10px 10px;
}

我们有相同的样式。

public/main.js
let dataEl = document.querySelector("div[data-words]");
let output = document.getElementById("output");

let btn = document.getElementById("read");
btn.addEventListener('click', () => {

    let mywords = dataEl.dataset.words;
    output.innerHTML = mywords;
});

main.js 也未更改。

在本文中,我们使用了文档的 dataset 属性。

作者

我叫 Jan Bodnar,我是一名充满激情的程序员,拥有丰富的编程经验。我从 2007 年开始撰写编程文章。迄今为止,我已撰写了 1400 多篇文章和 8 本电子书。我在编程教学方面拥有十多年的经验。