javascript实现网页子页面遍历回调的方法(涉及 window.frames、递归函数、函数上下文)
本文实例讲述了javascript实现网页子页面遍历回调的方法(涉及 window.frames、递归函数、函数上下文)。分享给大家供大家参考。具体如下:
提炼于本人手写的纯 JavaScript 工具程序,用于遍历当前网页的所有子页面 并执行迭代回调,且回调函数返回值可用于结果回传,有助于减少闭包变量~
其特点在于 —— 递归遍历时只检索子页面的 Window 对象,不立即执行回调函数,而是在检索结束后在普通循环结构中回调。这样可以尽量减少 递归调用时的内存消耗,也简化了程序结构,易于维护
全局函数 Frame_Each( CallBack ):
(function (BOM) { function All_Frames(iWindow) { var _Frames_ = [].slice.call(iWindow.frames, 0); for (var i = 0; i < _Frames_.length; i++) _Frames_ = _Frames_.concat( arguments.callee(_Frames_[i]) ); return _Frames_; } BOM.Frame_Each = function (CallBack) { var Frames = [this].concat( All_Frames(this) ); if (! CallBack) return Frames; for (var i = 0, CBR; i < Frames.length; i++) { try { Frames[i].name; } catch (iError) { continue; } CBR = CallBack.apply(Frames[i], [].slice.call(arguments, 1)); if (CBR === false) break; else if (CBR === undefined) continue; return CBR; } }; })(self);
使用示例:
// 无参数 —— 返回一个数组,包含函数调用所在的 Window 对象及其子页面的 Window,其顺序同递归遍历 var Pages = Frame_Each(); console.log( Pages.length ); // 定义回调 —— 回调返回值功能与普通循环语句的对应: // 1. undefined:continue // 2. false:break // 3. 其它任何值:break && return Value var Search_Result = Frame_Each(function () { var iFocus = this.document.activeElement; switch ( iFocus.tagName.toLowerCase() ) { case 'body': return false; case 'iframe': return; } return iFocus; }); Search_Result.innerHTML = 'Hello, Focus!';
希望本文所述对大家的javascript程序设计有所帮助。
相关推荐
-
java、js中实现无限层级的树形结构方法(类似递归)
js中: var zNodes=[ {id:0,pId:-1,name:"Aaaa"}, {id:1,pId:0,name:"A"}, {id:11,pId:1,name:"A1"}, {id:12,pId:1,name:"A2"}, {id:13,pId:1,name:"A3"}, {id:2,pId:0,name:"B"}, {id:21,pId:2,name:"B1&qu
-
Javascript 实现匿名递归的实例代码
递归是一种常见的编程技巧,实名递归相信大家都不陌生,但如果想要实现匿名递归呢?比如想要返回一个匿名递归函数,又或者是定义一个匿名递归函数并直接调用它,该怎样去做呢?本文将来探讨一下它的实现. 实名递归 我们还是先从实名递归说起吧,还是用那个最简单的求阶乘的例子: function fact(n) { if (n < 2) { return n; } else { return n * fact(n - 1); } } console.log(fact(5)); 递归要求自己调用自己,如果函数有名
-
一个JavaScript递归实现反转数组字符串的实例
<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title>每天一个JavaScript实例-递归实现反转数组字符串</title> <script> var func = function(x,indx,str){ return
-
AngularJS递归指令实现Tree View效果示例
本文实例讲述了AngularJS递归指令实现Tree View效果的方法.分享给大家供大家参考,具体如下: 在层次数据结构展示中,树是一种极其常见的展现方式.比如系统中目录结构.企业组织结构.电子商务产品分类都是常见的树形结构数据. 这里我们采用Angular的方式来实现这类常见的tree view结构. 首先我们定义数据结构,采用以children属性来挂接子节点方式来展现树层次结构,示例如下: [ { "id":"1", "pid":&quo
-
JavaScript中递归实现的方法及其区别
递归函数:递归函数是在通过名字调用自身的情况下构成的. 递归实现阶乘函数: 方法一:通过使用函数的名字 function factorial(num){ if(num<=1){ return 1; }else{ return num*factorial(num-1); } } console.log(factorial(4)); 结果为:24: 但是这种方法实现递归有一个问题,观察以下代码: function factorial(num){ if(num<=1){ return 1; }els
-
Vue.js 递归组件实现树形菜单(实例分享)
最近看了 Vue.js 的递归组件,实现了一个最基本的树形菜单. 项目结构: main.js 作为入口,很简单: import Vue from 'vue' Vue.config.debug = true import main from './components/main.vue' new Vue({ el: '#app', render: h => h(main) }) 它引入了一个组件 main.vue: <template> <div class="tree-m
-
JS基于递归算法实现1,2,3,4,5,6,7,8,9倒序放入数组中的方法
本文实例讲述了JS基于递归算法实现1,2,3,4,5,6,7,8,9倒序放入数组中的方法.分享给大家供大家参考,具体如下: var array = [1, 2, 3, 4, 5, 6, 7, 8, 9]; function reverseDump(start) { start++; if (start > array.length / 2) { return; } var temp = array[start]; array[start] = array[array.length - start
-
JS基于递归实现倒计时效果的方法
本文实例讲述了JS基于递归实现倒计时效果的方法.分享给大家供大家参考,具体如下: 效果: 事件: //发送验证码 $('.js-sms-code').click(function(){ $(this).attr("disabled", "disabled").html("<span style='color:#666'><span id='countdown'>60</span>s 后再试</span>&qu
-
利用java+mysql递归实现拼接树形JSON列表的方法示例
前言 本文给大家介绍的是关于利用java+mysql递归实现拼接树形JSON列表的相关内容,分享出来供大家参考学习,话不多说,来一起看看详细的介绍: 我们在做Java web项目时,前端控件例如国家-省-市-区-县等树形列表,常常需要多级树形json数据 例如: [ { "name": "商品目录", "pid": "-1", "id": "1", "children"
-
javascript实现网页子页面遍历回调的方法(涉及 window.frames、递归函数、函数上下文)
本文实例讲述了javascript实现网页子页面遍历回调的方法(涉及 window.frames.递归函数.函数上下文).分享给大家供大家参考.具体如下: 提炼于本人手写的纯 JavaScript 工具程序,用于遍历当前网页的所有子页面 并执行迭代回调,且回调函数返回值可用于结果回传,有助于减少闭包变量~ 其特点在于 -- 递归遍历时只检索子页面的 Window 对象,不立即执行回调函数,而是在检索结束后在普通循环结构中回调.这样可以尽量减少 递归调用时的内存消耗,也简化了程序结构,易于维护 全
-
javascript父、子页面交互技巧总结
帧用来存放子页面,既可以是iframe,又可以是frameset.window对象是全局对象,页面上的一切函数和对象都在它的作用域里. 1.parent代表父窗口.如果父窗口又存在若干层嵌套,则top代表顶级父窗口. self代表窗口自身. if(self==top){//}判断窗口是否处于顶级 if(self==parent){}//也可以 2.1.父页面访问子页面元素.思路是子页面的元素都在其window.document对象里面,先获取它然后就好说了. 帧最好设置name属性,这样操作最方
-
JavaScript实现网页带动画返回顶部的方法详解
服务器由阿里云换到了腾讯云,我的代码之前一直都是托管在git上的,但是搬家的时候,可能是着急了,之前有些新加的文件没有托管到git上,所以,就丢了. 不过无所谓了,可以重新写嘛. 之前博客的回到顶部功能是请之前的一位前端的同事帮忙写的,这次打算自己尝试一下. 返回顶部无非就是锚点. 第一个版本: <body style="height:2000px;"> <div id="topAnchor"></div> <a href=
-
利用JQuery操作iframe父页面、子页面的元素和方法汇总
前言 iframe在复合文档中经常用到,利用jquery操作iframe可以大幅提高效率,本文主要给大家分享了关于简单使用JQUERY来操作IFRAME的一些记录,这个使用纯JS也可以实现.下面话不多说了,来一起看看详细的介绍吧. 第一.在iframe中查找父页面元素的方法: $('#id', window.parent.document) 第二.在父页面中获取iframe中的元素方法: $(this).contents().find("#suggestBox") 第三.在iframe
-
JavaScript获取网页支持表单字符集的方法
本文实例讲述了JavaScript获取网页支持表单字符集的方法.分享给大家供大家参考.具体如下: JavaScript获取网页支持表单的字符集可通过表单的acceptCharset方法获得 <!DOCTYPE html> <html> <body> <form id="frm1" accept-charset="ISO-8859-1"> First name: <input type="text&quo
-
JavaScript获取对象在页面中位置坐标的方法
本文实例讲述了JavaScript获取对象在页面中位置坐标的方法.分享给大家供大家参考,具体如下: <script language="javascript" type="text/javascript" > function getXY(Obj) { var h = Obj.offsetHeight; for (var sumTop=0,sumLeft=0;Obj!=document.body;sumTop+=Obj.offsetTop,sumLeft
-
JavaScript识别网页关键字并进行描红的方法
本文实例讲述了JavaScript识别网页关键字并进行描红的方法.分享给大家供大家参考,具体如下: 这里演示JavaScript智能识别网页关键字并加红显示出来,相信这个效果大家不陌生吧,用JS加红关键字要比程序控制输出好得多,必竟将一部分功能交给了客户浏览器,相应减轻了服务器的压力. 运行效果截图如下: 在线演示地址如下: http://demo.jb51.net/js/2015/js-keyword-show-red-color-codes/ 具体代码如下: <!DOCTYPE html P
-
layer.open的自适应及居中及子页面标题的修改方法
layer.open的自适应: var index = parent.layer.getFrameIndex(window.name); //先得到当前iframe层的索引 parent.layer.iframeAuto(index); layer.open居中: var index1 = layer.load(2, { shade: false });//过渡 //重新定义layer.open的宽 var index = parent.layer.getFrameIndex(window.na
-
在Layui 的表格模板中,实现layer父页面和子页面传值交互的方法
最近,在项目中使用到了layer.layer的弹层组件可以说是非常好用,layer 至今仍作为 layui 的代表作.在项目中,需要实现一个在表格里面点击操作,然后弹出layer层,将父层表格的行值传给子页面,子页面拿到值后,进行业务处理,从而实现真正的父子页面交互. 其实,官方文档都说的很清楚了. layui官方文档:http://layer.layui.com/ 使用版本:2.3.0 只是,需要我们耐心的读懂文档内容,然后根据自己的业务情况,实现自己想要的效果. 一.子页面获取父页面数据 子
-
Django项目中用JS实现加载子页面并传值的方法
在Django的开发过程中,有一些功能是通过JS根据用户的不同选择来加载页面中的某一部分(子页面)的.如果子页面中有我们需要传入的值.可以这么实现 在js函数中调用 $("#base_page_div1").load('SUB_URL #sub_page_div1'); 此处 SUB_URL只需要是你在父页面对于URL基础上的多处部分即可.比如 父页面的URL为 /resource/base_url/ 子页面的URL为: /resource/base_url/sub_url/
随机推荐
- angular.js指令中的controller、compile与link函数的不同之处
- AngularJs expression详解及简单示例
- 10道典型的JavaScript面试题
- 正则表达式中的"g"是什么意思附件参数g的用法
- 简单理解遵循接口隔离原则的Java设计模式编程
- MYSQL批量插入数据的实现代码第1/3页
- java中的值传递和引用传递的区别分析
- Java的基本数据类型和运算方法(必看篇)
- asp.net上传文件到数据库的解决方案
- javascript判断复选框是否选中的方法
- 原生js实现日期联动
- android LinearLayout 布局实例代码
- PHP基于正则批量替换Img中src内容实现获取缩略图的功能示例
- 如何在node的express中使用socket.io
- java实现oracle插入当前时间的方法
- GridView生成的HTML代码示例对比
- Java运用SWT插件编写桌面记事本应用程序
- Linux的常用网络命令
- C语言十进制转二进制代码实例
- PHP使用PHPExcel实现批量上传到数据库的方法