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

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日

相关文章

  • JavaScript中Number对象的toFixed() 方法详解

    JavaScript中Number对象的toFixed() 方法详解 toFixed() 方法是JavaScript中Number对象的一个方法,可以将数字保留指定位数的小数。在本文中,我们将详细介绍这个方法的用法和示例,以便帮助读者更好地理解。 语法 toFixed() 方法的语法如下: number.toFixed([digits]) 其中,digits…

    JavaScript 2023年5月28日
    00
  • webpack将js打包后的map文件详解

    一、简介 当我们使用webpack将JavaScript代码打包合并成单个文件时,webpack会自动生成一个source map文件。这个文件的作用是将打包后的文件中的代码映射回未打包前的原始代码,方便我们调试和定位错误。本文将详细讲解webpack生成的source map文件的格式和使用方法。 二、source map文件格式 Webpack生成的so…

    JavaScript 2023年5月27日
    00
  • JavaScript闭包和回调详解

    JavaScript闭包和回调是JavaScript编程中重要的概念,下面我会详细讲解这两个概念以及如何使用它们。 什么是闭包? 在JavaScript中,函数内部的作用域可以访问函数外部的作用域。而且,当外部函数执行完毕后,其内部的变量通常会被销毁。但是,如果在内部函数中定义了一个新的闭包函数并返回它,那么这个闭包函数将会保留对其父函数的词法环境的引用,因…

    JavaScript 2023年6月10日
    00
  • js正则表达式之$1$2$3$4$5$6$7$8$9属性,返回子匹配的结果

    在正则表达式中,通过使用括号将某个子字符串匹配成一个组,从而在匹配结果中获取该组的值。而通过$1~$9属性,可以返回匹配文本的子匹配内容。以下是详细解释: $1, $2, $3, $4, $5, $6, $7, $8, $9属性 这些属性用于获取子匹配到的字符串,其对应的匹配组由圆括号指定。例如: const regex = /^(\d{4})-(\d{2}…

    JavaScript 2023年6月10日
    00
  • javascript中全局对象的isNaN()方法使用介绍

    当使用JavaScript时,我们可能需要检查某个值是否是”非数字”(NaN)。 在JavaScript中,有一个名为”isNaN()”的全局对象方法可以用于检查值是否为NaN。 1. isNaN()方法的语法 isNaN()方法将要被检查的值作为参数,其语法如下: isNaN(value) 其中,value表示需要检查是否为NaN的值。 2. 返回值 如果…

    JavaScript 2023年5月27日
    00
  • JavaScript面向对象之七大基本原则实例详解

    JavaScript面向对象之七大基本原则实例详解 本文将向大家介绍面向对象编程的七大基本原则,并结合示例详细讲解这些原则的实现方法。 七大基本原则 单一职责原则(SRP) 单一职责原则是指一个类只应该有一个单一的功能。如果一个类承担了过多的职责,那么这个类就会变得不可控,难以维护,并且不易复用。 开放封闭原则(OCP) 开放封闭原则是指软件实体(类、模块、…

    JavaScript 2023年5月27日
    00
  • JProfiler11使用教程之JVM调优问题小结

    下面我将详细讲解“JProfiler11使用教程之JVM调优问题小结”的完整攻略。 简介 JProfiler是一个功能强大的Java应用程序性能监控和调优工具。它可以帮助开发者识别和优化应用程序中的性能瓶颈,并提供了丰富的监控和调试功能,如CPU、内存、线程、GC等。本文主要介绍如何使用JProfiler进行JVM调优。 步骤 1. 安装JProfiler …

    JavaScript 2023年6月11日
    00
  • javascript实现数字时钟效果

    下面是详细讲解 JavaScript 实现数字时钟效果的完整攻略。 1. HTML 结构 首先需要在 HTML 文件中添加用于展示时间的结构。 <div id="clock"> <span id="hours"></span> : <span id="minutes&…

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