《JavaScript DOM 编程艺术》 第4章 笔记

第4章 案例研究:JavaScript图片库

*************************************************************************************************************************

<!DOCTYPE html>

<html lang="en">
<head>
<meta charset="utf-8" />
<title>Image Gallery</title>


<link type="text/css" rel="stylesheet" href="chapter4.css" media="screen" />


</head>


<body>


<h1>Snapshots</h1>
<ul>
<li>
    <a href="color/red.jpg" title="red" onClick="showPic(this);return false;" >red</a>
    </li>
    <li>
    <a href="color/blue.jpg" title="blue" onClick="showPic(this);return false;" >blue</a>
    </li>
    <li>
    <a href="color/yellow.jpg" title="yellow" onClick="showPic(this);return false;" >yellow</a>
    </li>
    <li>
    <a href="color/green.jpg" title="green" onClick="showPic(this);return false;" >green</a>
    </li>
</ul>


<img id="placeholder" src="color/indigo.jpg" alt="my image gallery" />


<p id="description">Choose an image.</p>


<script src="chapter4.js"></script>


</body>

</html>

*************************************************************************************************************************

关键知识:

(1)想在用户点击某个链接时触发一个动作,需要使用onClick事件处理函数。

(2)this关键字的含义是“这个对象”。

(3)点击链接时,我们希望触发事件发生在当前网页内,但链接被点击的默认行为也会被调用。这意味着用户会被带到新的窗口,而这不是我们想要的。我需要阻止这个默认行为被调用。方法是在onClick事件处理函数中让这个处理函数所触发的JavaScript代码返回布尔值false,这会让onClick事件处理函数认为“这个链接没有被点击”。

(4)


*************************************************************************************************************************

1.childNodes属性

可以用来获取任何一个元素的所有子元素。

返回一个数组。



function countBodyChildren()
{
var body_element=document.getElementsByTagName("body")[0];
alert(body_element.childNodes.length);
}

让这个函数在页面加载时执行,而这需要使用onload事件处理函数

window.οnlοad=countBodyChildren;//加在js文件里


2.替换图片

function showPic(whichpic)
{
//替换图片
var source=whichpic.getAttribute("href");//得到该图片的url
var placeholder=document.getElementById("placeholder");//得到被替换图片的元素对象
placeholder.setAttribute("src",source);//进行替换

}


3.nodeValue属性

如果想改变一个文本节点的值,那就使用DOM提供的nodeValue属性,它用来得到(和设置)一个节点的值。

在用nodeValue属性获取对象的值时,得到的并不是包含在这个段落里的文本。//这里我不懂

例:<p id="description">Choose an image.</p>

在这里,<p>元素本身的nodeValue属性是一个空值,而你真正需要的是<p>元素所包含的文本的值。

包含在<p>元素里的文本是另一种节点,它是<p>元素的第一个子节点。因此,你想要得到的其实是它的第一个子节点的nodeValue属性值。

function showPic(whichpic)
{
//替换图片
var source=whichpic.getAttribute("href");//得到该图片的url
var placeholder=document.getElementById("placeholder");//得到被替换图片的元素对象
placeholder.setAttribute("src",source);//进行替换
//替换文本
var text=whichpic.getAttribute("title");//得到该图片的title信息
var description=document.getElementById("description");//得到被替换文本的元素对象
description.firstChild.nodeValue=text;//进行替换

}


4.疑问

在第3点中,“在用nodeValue属性获取对象的值时,得到的并不是包含在这个段落里的文本。”

var description=document.getElementById("description");在这里,用id名得到一个对象description,而不是对象数组,那为什么description.firstChild.nodeValue中有firstChild呢?望懂得这个问题的人帮忙解答。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值