js模拟高级语言的重载

js以递归的方式模拟高级语言的重载,我以添加元素节点为例子:

//现有的子元素之前插入一个新的子元素
var before = function(elem,newElement,targetElement){
    if(targetElement === undefined)
        return before(newElement ? newElement.parentNode : null,elem,newElement);
    //兼容ie7以下目标节点为空报错的问题
    if(!targetElement)
        return elem ? elem.appendChild(newElement) : null;
    return elem.insertBefore(newElement,targetElement);
};
//现有的子元素之后插入一个新的子元素
var after = function(elem,newElement,targetElement){
    if(targetElement === undefined){
        return after(newElement ? newElement.parentNode : null,elem,newElement);
    }

    return !elem || (elem.lastElementChild || elem.lastChild) == targetElement ?
        // 如果最后的节点是目标元素,则直接添加。因为默认是最后
        before(elem,newElement,null)
    :
        //如果不是,则插入在目标元素的下一个兄弟节点 的前面。也就是目标元素的后面
        before(newElement, targetElement.nextElementSibling || targetElement.nextSibling);
};

//调用:
var elem = getElementById(‘d1‘),
    newElement = document.createElement(‘div‘),
    targetElement = elem.firstElementChild || elem.firstChild;

before(elem,newElement,targetElement);
before(newElement,targetElement);

after(elem,newElement,targetElement);
after(newElement,targetElement);
时间: 2024-10-07 07:48:23

js模拟高级语言的重载的相关文章

关于js模拟c#的Delegate(委托)实现

这是我的第一篇博文,想来讲一讲js的函数.我的标题是js模拟c#的Delegate. 一.什么是Delegate(委托) 在jquery中有delegate函数,作用是将某个dom元素的标签的事件委托给一个函数队列,在触发这个事件的时候会触发这个函数队列中的所有函数.而c#中的Delegate对象也是如此,将多个方法添加至一个委托对象,或称将多个方法委托给一个委托对象,当调用委托对象的Invoke方法时会调用所有被委托的方法.由此可以看出Delegate的本质应该是一个函数队列,执行委托对象就是

单篇文章JS模拟分页

废话部分 前两天做了一个前台分页插件,支持ajax读取数据绑定前台 和 url带页码参数跳转两种方式.于是稍加改动,做了一个单篇文章js模拟分页的代码,为什么说是模拟分页呢?因为在服务器响应HTML请求的时候,就已经把全文回传给客户端了,只是我们通过js的方式,把全文隐藏,每次翻页至显示出我们需要的那一部分,而不是真正的按需要去发出HTML请求.所以,在做这个插件的时候去掉了ajax请求的功能及其附带参数,去掉了pageSize参数(恒等于1).这里就不讨论具体的技术细节了和上一篇的分页计算原理

由chrome剪贴板问题研究到了js模拟鼠标键盘事件

写在前面 最近公司在搞浏览器兼容的事情,所有浏览器兼容的问题不得不一个人包了.下面来说一下今天遇到的一个问题吧 大家都知道IE下面如果要获得剪贴板里面的信息的话,代码应该如下所示 window.clipboardData.getData("Text") 可是在chrome下面就行不通了,chrome下面没有类似ie的这种方法,那应该怎么办呢,百度了一下,发现还真有办法. 只要在HTML界面上放上一个text类型的控件,如下所示 <textarea id="textAre

JS模拟时钟

<html> <head> <title>js模拟时钟</title> <meta http-equiv="content-type" content="text/html; charset=UTF-8"> </head> <body onLoad="setInterval(setTimeSpan,1000);"> <span style="fon

静态书架和js模拟翻书效果

书籍图片随便找了个,有点难看,须要的自己替换个好看点的png格式图片 源代码下载:http://download.csdn.net/detail/sweetsuzyhyf/7604091 静态书架和js模拟翻书效果,布布扣,bubuko.com

纯js模拟 radio和checkbox控件

代码待优化,功能实现了,不兼容ie8以上, 相同name的radio可以实现切换的操作, 分享代码,共同学习进步 <!doctype html> <html> <head> <meta charset="utf-8"> <title></title> <style> .radiobox, .checkbox { width: 10px; height: 10px; padding: 2px; borde

js中没有函数重载,怎样实现函数重载的功能?

js中没有函数重载,javasript中使用可选参数:arguments实现相同的功能.. 函数在定义的时候可不定义参数: <script type="text/javascript" > function say() { for (var i = 0; i < arguments.length; i++) { alert(arguments[i].toString()); } } </script> 调用:<input type="but

js模拟抛出球运动

js练手之模拟水平抛球运动 -匀加速运动 -匀减速运动 代码如下: <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> <title>js模拟抛出球运动</titl

JS~模拟表单在新窗口打开,避免广告拦截

说起广告拦截,这应该是浏览器的一个特性,它会将window.open产生的窗口默认为一个广告,将它进行拦截,但有时,这不是我们所希望的,有时,我们就是需要它在客户端的浏览器上弹出一个新窗口,以展示数据处理的更新结果,例如,一个创建商品的预览功能,它需要先保存数据,然后再在新窗口展示最新的信息,这种需求并不少,而大多数人的作法就是使用window.open去弹窗口,但它确实不是一种好的方式! 新方式来了 我们知道表单提交实际上可以把POST的结果响应到新窗口上,我们就是利用表单的这种性质,在JS中