这个图片库小例子的效果如图所示,点击网页上某个图片链接时你将看到两种效果:占位符图片呗替换成这个链接所指向的图片,同时描述性文字也被替换为这个链接的title属性值。

 
 

利用一个简单的图片库应用案例,介绍DOM的几个属性。

首先为图片创建一个链接清单,我们使用无序清单元素<ul>,图片集保存在images里。通过增加一个占位符图片在主页上为图片预留一个浏览区域<img id="placeholder" src="img/timg.jpg" alt="my image gallery"/>。

然后,我们要求点击某个链接的时候留在这个网页,同时看到点击的那张图片和原有的图片清单。

  • getAttribute:它是一个函数,用来获取元素的属性,getAttribute方法不属于document对象,所以不能通过document对象调用,只能通过元素节点对象调用。object.getAttribute(attribute),它的参数只有一个,就是你打算查询的属性的名字。
  • setAttribute:它允许我们修改属性节点的值,与getAtrribute一样,setAtrribute也只能用于元素节点。object.setAtrribute(attribute,value)

利用上面两种方法我们写一个函数,函数的名字叫showPic,参数叫whichPic。函数的作用有两个:

一、通过改变占位符图片的src属性将其替换为参数图片。

二、把图片下方的文本同时替换为那个图片连接的title属性值。

所以实现第一步后函数为:

function showPic(whichPic){
var source=whichPic.getAttribute('href');
var placeholder=document.getElementById('placeholder');
placeholder.setAttribute('src',source);
}

接下来我们扩展这个函数,要想把图片下方的文本替换为title属性值,并让它和相应的图片一起显示在网页上。

首先获取whichPic对象的title属性值,并把它存到text变量并获取元素节点<p></p>:

var text=whichPic.getAttribute('title');

var description=document.getElementById('description');

接下来实现本文的切换,如果想得到或改变一个本文节点的值,那就使用DOM提供的nodeValue属性:<p>是一个元素节点,它本身的nodeValue是空值,而我们需要的是<p>的第一个子节点,也就是它包含的文本节点。description.childNodes[0].nodeValue,也可以写成description.firstChild.nodeValue。

然后我们用text变量去刷新id值等于description的<p>元素的第一个子节点的nodeValue属性值:

descriptipn.firstChild.nodeValue=text;

扩展后的函数为:

function showPic(whichPic){
var source=whichPic.getAttribute("href");
var text=whichPic.getAttribute('title');
var descriptipn=document.getElementById('description');
var placeholder=document.getElementById('placeholder');
placeholder.setAttribute('src',source);
descriptipn.firstChild.nodeValue=text;
}

接下来给图片列表的链接添加行为,也就是事件处理函数(在特定事件发生时调用特定的JavaScript代码),我们这里用onclick点击事件。

当我们把onclick事件处理函数嵌入到一个链接中时,需要把这个链接本身用作showPic函数的参数,这个时候就用this,表示这个<a>元素节点。

现在有一个问题,我们点击链接时,不仅showPic函数被调用,链接点击的默认行为也会被调用,也就是页面还会跳转到图片查看窗口,所以我们要阻止默认行为。

事件处理函数的工作机制中,在给某元素添加事件处理函数后,一旦事件发生,相应JavaScript代码就会执行,所调用的JavaScript代码的返回值被传递给事件处理函数。当我们给a标签添加onclick事件处理函数并点击a触发其后,如果相应JavaScript代码返回true,onclick事件处理函数就会认为这个链接被点击了,同样的若返回false即会认为链接未被点击。所以在onclick所触发的代码中加上return false;就可以防止被带到图片查看窗口。

 

附:childNodes属性

childNodes属性用来获取任何一个元素的所有子元素。element.childNodes

它返回的是一个数组,所以用数组的length属性就能知道它包含的元素的个数。childNodes属性返回的数组包括所有类型的节点,而不仅仅是元素节点。空格,换行符都会被解释为节点。

每个节点都有nodeType属性:node.nodeType

元素节点的nodeType属性是1.

属性节点的nodeType属性是2.

文本节点的nodeType属性是3.

JavaScript图片库(简单的应用案例)的更多相关文章

  1. JavaScript的简单继承实现案例

    <html><body><script> //实现JavaScript继承的步骤: //1:写父类 //2:写子类 //3:用Object.create()来实现继 ...

  2. JavaScript DOM编程艺术第四章 — JavaScript图片库案例研究

    这一章通过JavaScript图片库案例,学习了一些DOM属性. HTML代码 <!DOCTYPE html> <html> <head> <meta cha ...

  3. javascript进阶教程第一章案例实战

    javascript进阶教程第一章案例实战 一.学习任务 通过几个案例练习回顾学过的知识 通过练习积累JS的使用技巧 二.实例 练习1:删除确认提示框 实例描述: 防止用户小心单击了“删除”按钮,在用 ...

  4. 平稳退化,JS和HTML标记分离,极致性能的JavaScript图片库

    index.html <!DOCTYPE html> <html lang="en"> <head> <meta charset=&quo ...

  5. JavaScript设置简单的自动时间

    下面就是一段简单的JavaScript设置简单的自动时间,时间显示在一个输入框input里面. <html> <head> </head> <body> ...

  6. Javascript的简单测试环境

    在<JavaScript忍者秘籍>2.4测试条件基础知识中,作者给出了一个精简版的assert和assert组的实现,对于初学者而言,这无疑是一个很好的例子,既让我们得到了一个好用的小工具 ...

  7. javaScript(2)---简单使用

    javaScript(2)---简单使用 学习要点: 1.创建一张HTML页面 2.<Script>标签解析 3.JS代码嵌入的一些问题 一.创建一张HTML页面 <!DOCTYPE ...

  8. Javascript学习-简单测试环境

    Javascript学习-简单测试环境 在<JavaScript忍者秘籍>2.4测试条件基础知识中,作者给出了一个精简版的assert和assert组的实现,对于初学者而言,这无疑是一个很 ...

  9. Python3+Dlib实现简单人脸识别案例

    Python3+Dlib实现简单人脸识别案例 写在前边 很早很早之前,当我还是一个傻了吧唧的专科生的时候,我就听说过人脸识别,听说过算法,听说过人工智能,并且也出生牛犊不怕虎般的学习过TensorFl ...

随机推荐

  1. 获取本地ip

    public void GetLocalIP(string username) { List<string> strIPs = new List<string>(); Netw ...

  2. 盘点selenium phantomJS使用的坑

    参考:http://www.jianshu.com/p/9d408e21dc3a   http://www.cnblogs.com/luxiaojun/p/6144748.html 豆瓣应该是ip被封 ...

  3. Protocol Buffer 时间类型定义

    ProtoBuf3中新增了TimeStamp类型,使用示例如下: syntax = "proto3"; import public "google/protobuf/ti ...

  4. 用于文件系统的C库函数

    9/20/2017 学<LINUX C编程实战>中 1.打开 File *fopen(const char *path , const char * mode); fopen实现打开指定的 ...

  5. IOS学习4——block代码块

    本文转载自:iOS开发-由浅至深学习block 一.关于block 在iOS 4.0之后,block横空出世,它本身封装了一段代码并将这段代码当做变量,通过block()的方式进行回调.这不免让我们想 ...

  6. iOS tableViewCell 在cell赋值、网络加载照片位置偏移大小错乱,做一个类似qq列表的tableview 更新3

    更新3: 问题 加载慢!(一时间给的处理负载过大,要分散)在下载图片,判断状态后 对每个cell对图片灰置图片处理保存,影响了主线程的操作 :上拉加载时,无法上下滑动tableview 无法点击cel ...

  7. bzoj 4446: [Scoi2015]小凸玩密室

    Description 小凸和小方相约玩密室逃脱,这个密室是一棵有n个节点的完全二叉树,每个节点有一个灯泡.点亮所有灯 泡即可逃出密室.每个灯泡有个权值Ai,每条边也有个权值bi.点亮第1个灯泡不需要 ...

  8. JAVA NIO学习二:通道(Channel)与缓冲区(Buffer)

    今天是2018年的第三天,真是时光飞逝,2017年的学习计划还没有学习完成,因此继续开始研究学习,那么上一节我们了解了NIO,那么这一节我们进一步来学习NIO相关的知识.那就是通道和缓冲区.Java ...

  9. SQL企业级面试题

    链接:90root MySQL企业面试题 1. 开发有一堆数据插入,如何防止插入的中文数据产生乱码? 2. 如何批量更改数据库表的引擎,如:myisam改为innodb 3. 如何批量更改数据库字符集 ...

  10. python 算法学习部分代码记录篇章1

    # -*- coding: utf-8 -*- # @Date : 2017-08-19 20:19:56 # @Author : lileilei '''那么算法和数据结构是什么呢,答曰兵法''' ...