这个图片库小例子的效果如图所示,点击网页上某个图片链接时你将看到两种效果:占位符图片呗替换成这个链接所指向的图片,同时描述性文字也被替换为这个链接的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. win7中用 httplistener 出现 503 错误的问题

    项目中须要用httplistener提供一个简单的httpserver服务.可是执行都是提示: UnHandledException Message:拒绝訪问 在System.Net.HttpList ...

  2. .NET Core 已经实现了PHP JIT,现在PHP是.NET上的一门开发语言

    12月23日,由开源中国联合中国电子技术标准化研究院主办的2017源创会年终盛典在北京万豪酒店顺利举行.在本次大会上,链家集团技术副总裁.PHP 开发组核心成员鸟哥发表了以 " PHP Ne ...

  3. C# 函数式编程 —— 使用 Lambda 表达式编写递归函数

    最近看了赵姐夫的这篇博客http://blog.zhaojie.me/2009/08/recursive-lambda-expressions.html,主要讲的是如何使用 Lambda 编写递归函数 ...

  4. 【Sqlserver系列】CAST和CONVERT

    1   概述 本篇文章主要讲解SqlServer中类型转换涉及的两个函数:CAST和CONVERT. 2   具体内容 2.1  CAST (1)作用:将一种数据类型的表达式转换为另一种数据类型的表达 ...

  5. mysql+mybatis递归调用

    递归调用的应用场景常常出现在多级嵌套的情况,比如树形的菜单.下面通过一个简单的例子来实现mysql+mybatis的递归. 数据模型 private Integer categoryId; priva ...

  6. 原生JS的Ajax

    转自:https://www.cnblogs.com/yufann/p/JS-Ajax.html 1.创建一个Ajax对象 非IE6浏览器:var obj = new XMLHttpReuqest() ...

  7. 《TCP-IP详解卷3:TCP 事务协议、HTTP、NNTP和UNIX域协议》【PDF】下载

    TCP-IP详解卷3:TCP 事务协议.HTTP.NNTP和UNIX域协议>[PDF]下载链接: https://u253469.pipipan.com/fs/253469-230062539 ...

  8. Java中参数传递问题

    Java中参数传递可以分为值传递和引用传递,话不多说直接撸代码 1.传原始类型(int,String等)数据是值传递 package test_1; public class Test { publi ...

  9. 【JS】第一个js示例

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  10. jquery如此强大,为什么还要写原生呢?

    这是一个伪标题,其实是一篇年终总结. 在这家公司一年多,蛮多收获的.大部分来自自己,小部分来自公司. 做前端开发到现在,我觉得可以分为两部分. 前半部分做项目用原生js,jquery以及各种基于jq的 ...