codeing or artist ?
记得大学第一节编程课,教授说,"如果一件事儿有对错,那么是科学。如果有美丑好坏,那么是艺术。" 一个能顺利运行还能让人阅读时体验思维美妙的代码,就是艺术和科学的结合。能运行的程序并不是好程序,能当作文章来读的才是。在我看来代码是一种特殊的文体,程序猿其实会写诗。

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);

 

posted on 2016-09-12 00:01  codeing-or-artist-??  阅读(288)  评论(0编辑  收藏  举报