父节点.appendChild —增加子节点至子元素尾,相当于数组的push(常用)
被插入节点的父节点.isnertBefore (a,b) —将a元素插入到b前面, ( 常用 )
var div = document.createElement('div'); var p = document.createElement('p'); div.appendChild(p) document.body.appendChild(div); var em = document.createElement('em') div.insertBefore(em,p);HTML结构
<div> <p class="p"> <span></span> </p> </div>扩展面试题:
1.封装函数insetAfter();功能类似insertBefore(); 提示:可以忽略老版本浏览器,直接在Element.prototype上编程
2.将目标节点内部的节点顺序逆序 例如:
<div><a></a><em></em></div> <div><em></em><a></a></div>答案: 1.
var div2 = document.getElementsByClassName("d2")[0]; var span = document.getElementsByTagName("span")[0]; var strong = document.getElementsByTagName("strong")[0]; var b = document.getElementsByTagName("b")[0]; Element.prototype.insertAfter = function(node, afterNode){ var beforenode = afterNode.nextElementSibling; if(beforenode){//如果不是最后一个节点 this.insertBefore(node,beforenode); }else{ //如果是最后一个节点 this.appendChild(node); } }注:原型链封装的好处,可以使用this指代调用的节点,不需要把调用节点当参数传入 2.
<!-- 实现目标节点内部的节点逆序) --> var div = document.getElementsByTagName("div")[0]; Element.prototype.reverse = function(){ var len = this.children.length; var lastNode = this.lastElementChild; var secondNode =lastNode.previousElementSibling; var pre = null; for(var i = 0;i < len;i++){ pre = secondNode.previousElementSibling; console.log("pre:"+secondNode.innerText); this.appendChild(secondNode); if(pre){ secondNode = pre; console.log("post"+secondNode.innerText); }else{ console.log(1111111111111); } } }