JavaScript 自定义属性 data-*使用介绍

yizhihongxing

JavaScript 自定义属性 data-*使用介绍

在 HTML5 中,我们可以使用自定义属性 data-* 来为 HTML 元素添加自定义属性,这些自定义属性可以用来存储任意类型的数据,也可以用 Javascript 来对其进行读写操作。

基本用法

语法格式如下:

<element data-attributeName="value">...</element>

其中 attributeName 就是你自定义属性的名字,而 value 就是对应的属性值了。

在 Javascript 中获取自定义属性的值可以使用 dataset 属性,例如:

<!-- html -->
<div id="myDiv" data-value="hello world"></div>
// js
const myDiv = document.querySelector('#myDiv');
console.log(myDiv.dataset.value); // 输出 "hello world"

这里的 dataset 属性就是能够获取到所有 data-* 自定义属性的名称和值,它是一个对象,其中的属性名就是 data-* 自定义属性去除 data- 前缀并转换成驼峰式命名法后的形式,例如上述例子中的 data-value 自定义属性转换后就是 myDiv.dataset.value

示例一:列表分页

下面是一个示例,帮助我们实现基于 data-* 自定义属性实现列表分页的功能。我们有一个默认隐藏掉的分页导航栏,其中的分页按钮通过 data-page 自定义属性记录下了对应的页码:

<div id="pagination" style="display: none;">
  <button data-page="1">1</button>
  <button data-page="2">2</button>
  <button data-page="3">3</button>
  <button data-page="4">4</button>
  <button data-page="5">5</button>
</div>

<ul id="list">
  <li>list item 1</li>
  <li>list item 2</li>
  <li>list item 3</li>
  <li>list item 4</li>
  <li>list item 5</li>
  <li>list item 6</li>
  <li>list item 7</li>
  <li>list item 8</li>
  <li>list item 9</li>
  <li>list item 10</li>
</ul>

接下来利用 Javascript,我们将根据当前的页码,来显示对应的列表内容。下面是代码实现:

const pagination = document.getElementById('pagination');
const list = document.getElementById('list');

pagination.addEventListener('click', (event) => {
  if (event.target.tagName === 'BUTTON') {
    const page = event.target.dataset.page;
    const start = (page - 1) * 5;
    const end = start + 5;
    for (let i = 0; i < list.children.length; i++) {
      if (i < start || i >= end) {
        list.children[i].style.display = 'none';
      } else {
        list.children[i].style.display = 'block';
      }
    }
  }
});

在上面的代码中,我们给分页按钮添加了点击事件监听器,当用户点击的时候,我们就会获取到对应的页码,然后利用简单的循环和 display 属性来显示或隐藏对应的列表项。

示例二:图像预加载

下面,我们来看一个例子,通过使用 data-* 自定义属性来实现图像预加载的功能。有时候我们需要在网页中预加载一些图片,特别是一些比较大的图片,为了防止用户等待过长的时间,我们可以在页面加载时就开始预加载图片。

我们可以在每个需要预加载的图片上添加一个 data-src 自定义属性,用来记录对应图片的源地址。比如下面的代码:

<img src="loading.gif" data-src="image1.jpg" alt="Pic 1">
<img src="loading.gif" data-src="image2.jpg" alt="Pic 2">
<img src="loading.gif" data-src="image3.jpg" alt="Pic 3">

其中 loading.gif 是我们的占位符图片,即尚未加载完成的图片的展示。

接着,我们通过 Javascript 来实现图片的预加载。

// 获取页面上所有的带有 data-src 属性的 img 标签
const images = document.querySelectorAll('img[data-src]');

// 定义一个计数器,记录已经被预加载的图片数量
let loaded = 0;

// 循环遍历每张图片,并为每张图片添加 onload 事件监听器
for (let i = 0; i < images.length; i++) {
  const image = images[i];
  image.onload = () => {
    loaded++;
    // 当所有图片全部被加载完成时,将所有占位符图片替换为对应的图片
    if (loaded === images.length) {
      for (let j = 0; j < images.length; j++) {
        images[j].src = images[j].getAttribute('data-src');
      }
    }
  };
  // 设置图片的 src 属性,开始加载图片
  image.src = image.getAttribute('data-src');
}

在上述代码中,我们首先获取了所有带有 data-src 自定义属性的图片,然后遍历每张图片,为其添加一个 load 事件监听器,在图片加载完成后记录计数器。当所有图片全部被加载完成时,我们就可以将所有的占位符图片替换为对应的图片。

结论

以上就是 data-* 自定义属性的使用介绍,我们可以看到,在实际开发中,利用自定义属性可以帮助我们更好地利用 Javascript 操作 HTML 元素,更方便地实现一些复杂的功能实现。如果您想要深入了解 Javascript 和 DOM 编程,一定要深入学习 data-* 自定义属性的使用。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JavaScript 自定义属性 data-*使用介绍 - Python技术站

(0)
上一篇 2023年6月10日
下一篇 2023年6月10日

相关文章

  • 3种js实现string的substring方法

    实现string的substring方法有多种方法,这里介绍其中的3种JS实现方式,分别是: 使用slice方法 使用substr方法 使用substring方法 1. 使用slice方法 slice()方法可以接收两个参数,分别是开始位置和结束位置,返回从开始位置到结束位置的字符串。 例如: let str = "Hello World&quot…

    JavaScript 2023年5月28日
    00
  • JS验证不重复验证码

    关于 “JS验证不重复验证码”的完整攻略,我将按以下步骤讲解。 第一步:在前端生成并展示验证码 首先,在前端页面中,我们需要生成一个验证码,可以使用不同的方式,如下面的代码示例所示: <div> <label for="captcha-input">验证码:</label> <input type…

    JavaScript 2023年6月10日
    00
  • javascript中如何判断类型汇总

    下面是关于JavaScript中如何判断类型的完整攻略。本文将涵盖JavaScript中的原始类型、引用类型等常见类型的判断方式,并提供了实例代码进行说明。 一、JavaScript中的类型 JavaScript中的数据类型可以分为两类:原始类型和引用类型。 1.1 原始类型 JavaScript中的原始类型有6种,分别为:undefined、null、bo…

    JavaScript 2023年5月28日
    00
  • JS倒计时两种实现方式代码实例

    下面我来详细讲解一下“JS倒计时两种实现方式代码实例”的完整攻略。 1. 倒计时实现方式一 1.1 基本思路 通过设定一个起始时间和一个截止时间,计算它们之间的时间差,并将时间差转化为时、分、秒显示在页面上,同时在每隔一秒钟更新一次时间。 1.2 代码实例 //定义起始时间、截止时间变量 var startTime = new Date(‘2021/10/1…

    JavaScript 2023年5月27日
    00
  • JavaScript防抖与节流详解

    JavaScript防抖与节流详解 前言 在Web开发中,我们经常需要对用户的操作进行响应,比如防止用户频繁点击按钮或滚动页面。而JavaScript中通过防抖和节流两种方式来解决这个问题。防抖和节流的核心思想都是通过控制函数的执行次数来达到节省性能的效果,但两者的实现方式略有不同。 防抖 防抖的原理是将多次执行变成最后一次执行,也就是在用户停止操作一段时间…

    JavaScript 2023年6月11日
    00
  • 深入浅析JavaScript的API设计原则

    深入浅析JavaScript的API设计原则 在JavaScript的编程中,API设计扮演了非常重要的角色。一个优秀的API可以让开发者方便使用并且提高代码的可读性和可维护性。本文将详细讲解JavaScript API设计的原则,并提供两条示例来说明。 原则1:一致性 API的一致性是非常重要的。相似的功能应该采用相似的命名和用法。这样可以让开发者对API…

    JavaScript 2023年5月27日
    00
  • Javascript之面向对象–封装

    Javascript之面向对象–封装 什么是封装 封装(Encapsulation)是面向对象编程的三大特性之一,它指的是将程序中的数据和方法包装在一起,形成一个类(Class),并且对外部隐藏这些实现的细节,只把公共的接口(接口就是能够被外部访问到的数据和方法)暴露出来,外部无法直接访问类内部的变量或函数。 封装能够提供以下优点: 隐藏实现细节,保证数据…

    JavaScript 2023年5月27日
    00
  • JavaScript 中级笔记 第一章

    JavaScript 中级笔记 第一章攻略 简介 本章节主要介绍了一些 JavaScript 的高级概念。其中包括了 JavaScript 中的函数,作用域,闭包与 this 等高级特性。本章给出了这些高级特性在 JavaScript 中的实现方法,加深了读者对 JavaScript 中这些概念的理解。 JavaScript 函数 JavaScript中的函…

    JavaScript 2023年5月18日
    00
合作推广
合作推广
分享本页
返回顶部