﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-小鸟学C++-文章分类-web开发</title><link>http://www.cppblog.com/zjy17243/category/19181.html</link><description>基础学习</description><language>zh-cn</language><lastBuildDate>Tue, 24 Apr 2012 11:08:20 GMT</lastBuildDate><pubDate>Tue, 24 Apr 2012 11:08:20 GMT</pubDate><ttl>60</ttl><item><title>(转)javascript获取frameset中各个模块中的数据</title><link>http://www.cppblog.com/zjy17243/articles/172544.html</link><dc:creator>月下孤影</dc:creator><author>月下孤影</author><pubDate>Tue, 24 Apr 2012 00:42:00 GMT</pubDate><guid>http://www.cppblog.com/zjy17243/articles/172544.html</guid><wfw:comment>http://www.cppblog.com/zjy17243/comments/172544.html</wfw:comment><comments>http://www.cppblog.com/zjy17243/articles/172544.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/zjy17243/comments/commentRss/172544.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/zjy17243/services/trackbacks/172544.html</trackback:ping><description><![CDATA[<p style="color: #333333; font-family: Arial; line-height: 26px; text-align: left; "><strong><span style="font-size: medium; ">框架编程概述&nbsp;</span></strong><span style="font-size: x-small; ">一个HTML页面可以有一个或多个子框架，这些子框架以&lt;iframe&gt;来标记，用来显示一个独立的HTML页面。这里所讲的框架编程包括框架的自我控制以及框架之间的互相访问，例如从一个框架中引用另一个框架中的JavaScript变量、调用其他框架内的函数、控制另一个框架中表单的行为等。</span></p><p style="color: #333333; font-family: Arial; line-height: 26px; text-align: left; "><strong><span style="font-size: medium; ">框架间的互相引用&nbsp;</span></strong><span style="font-size: x-small; ">一个页面中的所有框架以集合的形式作为window对象的属性提供，例如：window.frames就表示该页面内所有框架的集合，这和表单对象、链接对象、图片对象等是类似的，不同的是，这些集合是document的属性。因此，要引用一个子框架，可以使用如下语法： window.frames["frameName"]; window.frames.frameName window.frames[index] 其中，window字样也可以用self代替或省略，假设frameName为页面中第一个框架，则以下的写法是等价的： self.frames["frameName"] self.frames[0] frames[0] frameName 每个框架都对应一个HTML页面，所以这个框架也是一个独立的浏览器窗口，它具有窗口的所有性质，所谓对框架的引用也就是对window对象的引用。有了这个window对象，就可以很方便地对其中的页面进行操作，例如使用window.document对象向页面写入数据、使用window.location属性来改变框架内的页面等。下面分别介绍不同层次框架间的互相引用：</span></p><p style="color: #333333; font-family: Arial; line-height: 26px; text-align: left; "><span style="font-size: x-small; "><strong>1．父框架到子框架的引用</strong>&nbsp;知道了上述原理，从父框架引用子框架变的非常容易，即： window.frames["frameName"]; 这样就引用了页面内名为frameName的子框架。如果要引用子框架内的子框架，根据引用的框架实际就是window对象的性质，可以这样实现： window.frames["frameName"].frames["frameName2"]; 这样就引用到了二级子框架，以此类推，可以实现多层框架的引用。</span></p><p style="color: #333333; font-family: Arial; line-height: 26px; text-align: left; "><span style="font-size: x-small; "><strong>2．子框架到父框架的引用&nbsp;</strong>每个window对象都有一个parent属性，表示它的父框架。如果该框架已经是顶层框架，则window.parent还表示该框架本身。</span></p><p style="color: #333333; font-family: Arial; line-height: 26px; text-align: left; "><span style="font-size: x-small; "><strong>3．兄弟框架间的引用</strong>&nbsp;如果两个框架同为一个框架的子框架，它们称为兄弟框架，可以通过父框架来实现互相引用，例如一个页面包括2个子框架： &lt;frameset rows="50%,50%"&gt; &nbsp;&nbsp;&nbsp;&nbsp; &lt;frame src="1.html" name="frame1" /&gt; &nbsp;&nbsp;&nbsp;&nbsp; &lt;frame src="2.html" name="frame2" /&gt; &lt;/frameset&gt; 在frame1中可以使用如下语句来引用frame2： self.parent.frames["frame2"];</span></p><p style="color: #333333; font-family: Arial; line-height: 26px; text-align: left; "><span style="font-size: x-small; "><strong>4．不同层次框架间的互相引用</strong>&nbsp;框架的层次是针对顶层框架而言的。当层次不同时，只要知道自己所在的层次以及另一个框架所在的层次和名字，利用框架引用的window对象性质，可以很容易地实现互相访问，例如： self.parent.frames["childName"].frames["targetFrameName"];</span></p><p style="color: #333333; font-family: Arial; line-height: 26px; text-align: left; "><span style="font-size: x-small; "><strong>5．对顶层框架的引用</strong>&nbsp;和parent属性类似，window对象还有一个top属性。它表示对顶层框架的引用，这可以用来判断一个框架自身是否为顶层框架，例如： //判断本框架是否为顶层框架 if(self==top){ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //dosomething }</span></p><p style="color: #333333; font-family: Arial; line-height: 26px; text-align: left; "><strong><span style="font-size: medium; ">改变框架的载入页面&nbsp;</span></strong><span style="font-size: x-small; ">对框架的引用就是对window对象的引用，利用window对象的location属性，可以改变框架的导航，例如： window.frames[0].location="1.html"; 这就将页面中第一个框架的页面重定向到1.html，利用这个性质，甚至可以使用一条链接来更新多个框架。 &lt;frameset rows="50%,50%"&gt; &nbsp;&nbsp;&nbsp;&nbsp; &lt;frame src="1.html" name="frame1" /&gt; &nbsp;&nbsp;&nbsp;&nbsp; &lt;frame src="2.html" name="frame2" /&gt; &lt;/frameset&gt; &lt;!--somecode--&gt; &lt;a href="frame1.location='3.html;frame2.location='4.html'" onclick=""&gt;link&lt;/a&gt; &lt;!--somecode--&gt;</span></p><p style="color: #333333; font-family: Arial; line-height: 26px; text-align: left; "><strong><span style="font-size: medium; ">引用其他框架内的JavaScript变量和函数&nbsp;</span></strong><span style="font-size: x-small; ">在介绍引用其他框架内JavaScript变量和函数的技术之前，先来看以下代码： &lt;script language="JavaScript" type="text/javascript"&gt; &lt;!-- function hello(){ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; alert("hello,ajax!"); } window.hello(); //--&gt; &lt;/script&gt; 如果运行了这段代码，会弹出&#8220;hello,ajax!&#8221;的窗口，这正是执行hello()函数的结果。那为什么hello()变成了window对象的方法呢？因为在一个页面内定义的所有全局变量和全局函数都是作为window对象的成员。例如： var a=1; alert(window.a); 就会弹出对话框显示为1。同样的原理，在不同框架之间共享变量和函数，就是要通过window对象来调用。例如：一个商品浏览页面由两个子框架组成，左侧表示商品分类的链接；当用户单击分类链接时，右侧显示相应的商品列表；用户可以单击商品旁的【购买】链接将商品加入购物车。在这个例子中，可以利用左侧导航页面来存储用户希望购买的商品，因为当用户单击导航链接时，变化的是另外一个页面，即商品展示页面，而导航页面本身是不变的，因此其中的JavaScript变量不会丢失，可以用来存储全局数据。其实现原理如下：假设左侧页面为link.html，右侧页面为show.html，页面结构如下： &lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"&gt; &lt;html&gt; &lt;head&gt; &lt;title&gt; New Document &lt;/title&gt; &lt;/head&gt; &lt;frameset cols="20%,80%"&gt; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;frame src="link.html" name="link" /&gt; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;frame src="show.html" name="show" /&gt; &lt;/frameset&gt; &lt;/html&gt; 在show.html中展示的商品旁边可以加入这样一条语句： &lt;a href="void(0)" onclick="self.parent.link.addToOrders(32068)"&gt;加入购物车&lt;/a&gt; 其中link表示导航框架，在link.html页面中定义了arrOrders数组来存储商品的id，函数addToOrders()用来响应商品旁边【购买】链接的单击事件，它接收的参数id表示商品的id，例子中是一个id为32068的商品： &lt;script language="JavaScript" type="text/javascript"&gt; &lt;!-- var arrOrders=new Array(); function addToOrders(id){ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; arrOrders.push(id); } //--&gt; &lt;/script&gt; 这样，在结帐页面或是购物车浏览页面就可以用arrOrders来获取所有准备购买的商品。框架可以使一个页面划分为功能独立的多个模块，每个模块之间彼此独立，但又可以通过window对象的引用来建立联系，是Web开发中的一个重要机制。在Ajax开发中，还可以利用隐藏框架实现各种技巧，在后面介绍Ajax实例编程时可以发现，无刷新上传文件以及解决Ajax的前进后退问题都会用到这种技术。</span></p><img src ="http://www.cppblog.com/zjy17243/aggbug/172544.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/zjy17243/" target="_blank">月下孤影</a> 2012-04-24 08:42 <a href="http://www.cppblog.com/zjy17243/articles/172544.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>