JS 除了可以操作 HTML 元素现有的属性外,还可以对 HTML 元素自定义属性以及对这些自定义的属性进行读、写操作。JS 可以为任何 HTML 元素自定义任意的属性(属性名必须符合标识符规范)。

使用 JavaScript 获取 HTML 元素后,就可以对该元素自定义属性,定义格式如下:

元素对象.自定义属性名 = 属性值

元素一旦自定义了某个属性后,该属性就和元素的内置属性的用法完全一样,即可通过元素对该属性进行读或写操作。

1. 自定义开关属性及其在图片切换中的应用

在实际应用时,有时需要一组元素能各自独立进行两种状态之间的相互切换,例如,一个列表中的各个列表项在单击时,列表项的背景图片可以在两个背景图片之间相互切换。要实现这种需求,通常需要对这组元素使用开关属性来控制其状态的切换。所谓开关属性指的是值为 true 或 false 的属性。

【例 1】自定义开关属性及其在图片切换中的应用。

自定义开关属性及其在图片切换中的应用

ul{padding:0;}

li{list-style:none;width:114px;height:140px;background:url(images/normal.jpg);

float:left;margin-right:20px;}

window.onload = function(){

var aLi = document.getElementsByTagName("li");

for(var i = 0; i < aLi.length; i++){

aLi[i].onOff = true;//为每个列表添加开关属性

aLi[i].onclick = function(){

if(this.onOff){

this.style.background = 'url(images/active.jpg)';

this.onOff = false;

}else{

this.style.background = 'url(images/normal.jpg)';

this.onOff = true;

}

};

}

};

上述 HTML 代码在页面中创建了 3 个列表项,CSS 代码设置各个列表项的最初背景图片为 normal.jpg。在 JS 代码中,使用循环语句 aLi[i].onOff=true 为 3 个列表项分别定义了一个开关属性。通过判断开关属性的真、假,实现列表项的背景图片的切换以及开关属性值的切换。

在 Chrome 浏览器中的最初运行结果如图 1 所示。

图 1:运行最初状态

对各个列表项单击一次时的结果如图 2 所示。

图 2:各个列表项单击一次的状态

在图 2 上再单击任一个列表项,则该列表项的背景图片又切换回图 1 所示的背景图片。可见,各个列表项在单击时会在图 1 和图 2 所示的两种背景图片之间相互切换。

2. 自定义数字属性及其在图片切换中的应用

当元素需要一个属性值为一个数字,且可以在一定范围内动态变化的属性时,我们可以为该元素自定义一个数字属性。数字属性的应用场景主要是需要将该属性值依次匹配数组各个元素的索引。例如,可以对一个按钮添加数字属性,并设属性初始值为 0,每次单击按钮时使该属性值递增 1,从而可以使按钮的这个数字属性值和某个数组的下标对应,由此可通过它来获取数组元素,具体代码如下所示。

【例 2】自定义数字属性及其在图片切换中的应用。

自定义数字属性及其在图片切换中的应用

div{margin:0 auto;text-align:center;width:300px;height:210px;}

img{width:288px;height:206px;}

window.onload = function(){

var arr = ['p1.jpg','p2.jpg','p3.jpg','p4.jpg','p5.jpg'];

var oBtn = document.getElementsByTagName('input')[0]

var oImg = document.getElementsByTagName('img')[0];

oBtn.num = 0;//自定义数字属性

oBtn.onclick = function(){

this.num++;//递增属性值

if(this.num == arr.length)//当属性值等于数组长度时,将属性值重置为0

this.num = 0;

oImg.src = 'images/' + arr[this.num];//使用属性值作为数组下标

};

};

上述 JS 代码定义数组 arr 包含了 5 张图片,需要显示的图片分别来自于这个数组。页面最初显示数组中的第一张图片,每次单击按钮后将依次显示数组的图片,当显示数组中的最后一张图片时再单击,又将从数组的第一张图片开始显示,如此不断循环往复地切换显示图片。为了在单击按钮时对应获取数组中的图片,可对按钮定义数字属性,并将该属性值作为数组的下标来使用。

在上述JS代码中,我们使用 oBtn.num=0 为按钮定义了一个初始值为 0 的数字属性,每单击一次按钮,数字属性值就递增 1,当数字属性值递增到等于数组长度时,数字属性值重置为 0。将每次单击按钮后得到的数字属性值作为数组的下标来获取数组中的图片,从而实现每次单击按钮时切换图片。

图 3 所示为最初的运行结果。

图 3:运行最初状态

此时单击按钮时将显示图 4 所示结果。

图 4:第一次单击按钮后的结果

再依次单击按钮 3 次时,将依次切换显示数组中的 p3.jpg、p4.jpg 和 p5.jpg。此后再单击按钮,又将按数组中的元素从 p1.jpg~p5.jpg 依次切换显示。

3. 自定义索引属性及其在图片切换中的应用

如果希望一组元素和某个数组中的元素之间建议匹配或对应关系,则可以通过对该组元素中的每个元素添加一个索引属性来达到。例如希望一组按钮和一个数组中的元素一一对应,则可对每个按钮添加一个索引属性,属性的取值等于对应的数组元素的下标,实现代码请见例 3。

【例 3】自定义索引属性实现按钮和数组元素的匹配关系。

自定义索引属性实现按钮和数组元素的匹配关系

window.onload = function(){

var aBtn = document.getElementsByTagName('input');

var arr = ['添加','编辑','删除'];

for(var i = 0; i < aBtn.length; i++){

aBtn[i].index = i;//自定义索引属性

aBtn[i].onclick = function(){

//通过索引属性建立按钮和数组元素的对应关系

aBtn[this.index].value = arr[this.index];

};

}

};

上述代码要求在网页运行后单击按钮时,能将 3 个按钮上的初始 label 替换为指定数组中的对应元素,这就要求建立 3 个按钮和数组中 3 个元素的一一对关系。为此,在上述代码中,我们在循环语句中对3个按钮分别自定义了一个索引属性,且属性值分别和数组 arr 的下标对应,因而就可以直接使用按钮的索引属性值作为对应的数组元素下标来获取对应的数组元素。

示例 3 在 Chrome 浏览器中的运行结果分别如图 5 和图 6 所示。

图 5:运行最初状态

图 6:各个按钮单击后的状态

从图 6 中可见,各个按钮的 label 在单击后被替换为 arr 数组中的对应元素。在互联网上的许多网页中,经常会看到图 7 所示效果的图片切换。

图 7:单击圆点切换图片

在图 7 中,默认显示的图片对应第一个红色圆点,单击图片下面的圆点时会切换显示图片,同时被单击的圆点会变为红色,而对应切换前的图片的圆点则变为白色,红色表示该圆点对应正在显示的图片。可见,每张显示的图片和下面的圆点是一一对应的。

通过上面的分析很容易想到,要实现圆点和图片一一对应,只需要将图片作为数组元素,同时对各个圆点设置索引属性,且属性值和存放图片的数组下标一一对应即可。具体代码请见例 4。

【例 4】自定义索引属性及其在图片切换中的应用。

自定义索引属性在图片切换中的应用

ul{margin:0; padding:0;}

li{display:inline-block;}

body{background:#333;}

#pic{width:300px;height:206px; margin:0 auto;}

#pic img{width:300px; height:206px;}

#pic ul{margin-top:10px; text-align:center;}

#pic .item, #pic .active{width:9px; height:9px; cursor:pointer;

border-radius:10px; margin:1px 1px 1px 8px;}

#pic .item{background:#FFF;}

#pic .active{background:#F60;}

window.onload = function(){

var oDiv = document.getElementById('pic');

var oImg = oDiv.getElementsByTagName('img')[0];

var oUI = oDiv.getElementsByTagName('ul')[0];

var arrUrl = ['images/p1.jpg', 'images/p2.jpg', 'images/p3 jpg', 'images/p4.jpg'];

var aLi = oDiv.getElementsByTagName('li');

//生成对应图片个数的列表项

for(var i = 0; i < arrUrl.length; i++){

oUl.innerHTML + = "

";

}

//初始化第一张显示图片为数组的第一个元素,第一个列表项处于活动状态

olmg.src = arrUrl[0];

aLi[0].className ='item active';

for(var j = 0; j < aLi.length; j++){

aLi[i].index = j; //为每个列表项自定义索引属性,属性值和数组下标一对应

aLi[j].onclick = function(){

olmg.src = arrUrl[this.index]; //将当前列表项对应的数组元素设置为显示图片

//更新活动状态:首先全部清空活动状态,然后再设置当前 li 为活动状态

for(var i = 0; i < aLi.length; i++){

aLi[i].className = 'item';

}

this.className = 'item active';//设置当前li为活动状态

};

}

};

上述 JS 代码中首先将要显示的图片全部放到数组 arrUrl 中,并通过 for 循环语句生成了对应数组元素的列表项,同时通过 item 类样式中的 border-radius:10px 样式代码将列表项设置为圆点。接着使用 JS 将页面初始显示图片设置为数组中的第一个元素对应的图片,同时通过 active 类样式将第一个圆点的颜色显示为红色,表示活动状态。

为了使各个圆点对应数组中存放的各个图片,在 JS 代码中又使用了一个 for 循环语句。在该循环语句中,首先使用 aLi[j].index=j 代码为每个列表项自定义索引属性,而在列表项单击事件中则将当前列表项对应的数组元素设置为显示图片,从而间接建立了圆点和显示图片的一一对应关系。

这样在任何时候单击任意一个圆点,都会立即切换显示对应的图片。图 8 和图 9 所示分别为单击第二个圆点和第四个圆点时的运行结果。

图 8:单击第二个圆点时的显示图片

图 9:单击第四个圆点时的显示图片

当再次单击图 8 或图 9 中的第一个圆点时,显示的结果将和图 7 完全一样。可见,圆点和图片是一一对应的。

js中给html元素追加属性,JS为元素添加自定义属性相关推荐

  1. JS中window对象的opener属性

    JS中window对象的opener属性 JS中window对象的opener属性 window.opener是js中window的一个属性,它返回的是打开当前窗口的窗口对象.如果窗口A弹出一个窗口B ...

  2. 在js中如何使用jquery的属性选择器

    个人理解: 可以更快捷的改变标签的属性 第一步先创建好需要用的标签: <input type="checkbox" name="newsletter" v ...

  3. 【JS笔记】JS中的DOM对象以及通过JS获取DOM结点,操作DOM属性、DOM增删改查

    这篇文章,主要介绍JS中的DOM对象以及通过JS获取DOM结点,操作DOM属性.DOM增删改查​​​​​​​. 目录 一.JS中的DOM 1.1.什么是DOM 1.2.获取DOM结点 (1)获取htm ...

  4. js中直接通过id名获取到这个元素

    浏览器日常bug: 最近在复习javascript的时候发现了一个我还没有见过的一个有趣的东西,可能你也没有见过,所以就在这里记录一下:就是js中直接通过id名获取到这个元素,且不使用getEleme ...

  5. js中实现截取数组的后几个元素作为一个新数组的方法

    js中实现截取数组的后几个元素作为一个新数组的方法 有时候我们会遇到这种需求,截取数组中后5个元素作为一个新数组,且顺序不能变.数组中的slice()方法和splice()方法都可以实现这样的操作. ...

  6. vue中引用js_从JS中的内存管理说起 —— JS中的弱引用

    点击上方"蓝字"关注本公众号 写在前面 在所有的编程语言中,我们声明一个变量时,需要系统为我们分配一块内存.当我们不再需要这个变量时,需要将内存进行回收(这个过程称之为垃圾回收). ...

  7. php点击后增加html元素,如何动态生成html元素以及为元素追加属性的方法介绍(附代码)...

    本篇文章给大家分享的是关于如何动态生成html元素以及为元素追加属性的方法介绍(附代码),内容很不错,有需要的朋友可以参考一下,希望可以帮助到大家. 动态生成HTML元素的方法有三种: 第一种:doc ...

  8. js相对路径相关(比如:js中的路径依赖导入该js文件的路径)

    问题描述: 前几天调用同事的js接口文件,在他自己的html测试页面ok,在我这边调用时出现问题. debug过程中,将该测试html移到其他位置都不行,放到原html测试页面同层次路径下是OK的. ...

  9. 如何使用Vue.js中的set设置对象属性值

    1.问题背景 使用vue初始化一个对象v,并在data中初始化一个空对象obj,然后使用Vue.set()给对象obj添加属性 2.实现源码 <!DOCTYPE html> <htm ...

最新文章

  1. 在网页中调用本地的应用程序
  2. MasterPage事件使用
  3. C++自定义对象如何支持Range-based循环语法
  4. C++(4)--初识变量、数据类型
  5. LDAP命令介绍---ldappasswordmodify口令修改操作
  6. 使用protostuff进行序列化
  7. 【操作系统学习笔记】操作系统基础
  8. 一个关于 UIPickerView 的 bug
  9. PMP报考 你成功了吗?
  10. C99标准的新特性(相对于Ansi C)
  11. c语言ab43错误的是,求助,AB+没法玩下去了,详情请看报错代码
  12. win10计算机安全模式怎么,Win10系统怎么快速进入安全模式?
  13. Android面试题【高级工程师版】
  14. 基于卷积神经网络(CNN)的猫狗识别
  15. Oracle Forensics t00ls
  16. Docker笔记 —— 简介与安装 + Centos的一些配置
  17. 【TOJ 3755】 Graph and Queries【Splay】
  18. 中职双师型教师计算机培训总结,双师型教师计算机培训心得体会.docx
  19. win7系统iis建立ftp服务器,win7 iis建立ftp服务器
  20. Lenovo 使用BoMC工具制作微码升级U盘刷新System x

热门文章

  1. 破解高职学院计算机类专业边缘化的问题
  2. 丽笙酒店集团2020年度在亚太地区新签署84间酒店
  3. CSS文本超出部分利用省略代替
  4. 使用Spring Security和Thymeleaf进行CSRF保护
  5. 使用Vscode连接进入docker容器
  6. 【前端】Vue2全家桶案例《看漫画》之四、漫画页
  7. Mac 下使用 Aria2 实现迅雷离线和百度云下载
  8. 【大话设计模式】全局把握篇
  9. Win32程序堆内存的使用和使用winhex查看堆内存示例
  10. 程序员,我在北上广寻找生活的感觉