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