JavaScript DOM课后作业
课后作业
1. 封装函数insertAfter()功能类似insertBefore();
提示: 可忽略老版本浏览器,直接在Element.prototype上编程
2. 封装remove()使得child.remove()直接可以销毁自身
3. 将目标节点内部的节点顺序,逆序
eg:<div> <a></a> <em></em></div>
<div><em></em><a></a></div>
1、封装函数 insertAfter() 功能类似 insertBefore()
系统提供了 insertBefore() 方法,想实现一个系统没提供 insertAfter() 功能,
之前可以把 p 标签放到 b 标签前面,可以用 insertAfter(p, b)方法,
现在把 p 标签插入到 b 标签后面,没有直接的方法可以间接的实现,
b 标签的后面就是 span 标签的前面,找到下一个兄弟元素节点,放到下一个兄弟元素节点的 insertAfter(p, span) 就实现了 insertAfter 功能
<p></p> <div> <i></i> <b></b> <span></span> </div>
现在要把"p"标签插入到"i"标签后面,就等于插入到"b"标签前面,插入到"b"标签前面有insertBefore方法,这是一个同等转化的问题。
同等转化不能解决所有的问题,比如把p标签插入到span标签后面呢,找不到是什么标签的前面了,这种情况怎么解决?插入到最后一位用appendChild()方法,只要判断一下插入的位置是不是最后一位就OK。
insertAfter方法要到父级上找这个方法,所以写到原型链上。
<div>
<i></i>
<b></b>
<span></span>
</div>
<script>
Element.prototype.insertAfter = function (targetNode ,afterNode) {
var beforeNode = afterNode.nextElementSibling; // 比如,在b标签后面插入,要把span求出来
this.insertBefore(targetNode, beforeNode); // 把p标签插入到b标签后面
}
var div = document.getElementsByTagName('div')[0];
var p = document.createElement('p');
var b = document.getElementsByTagName('b')[0];
div.insertAfter(p, b); // 第一种情况下插入操作完了
/*
<div>
<i></i>
<b></b>
<p></p>
<span></span>
</div>
*/
</script>第二种情况是beforeNode是null
<div>
<i></i>
<b></b>
<span></span>
</div>
<script>
Element.prototype.insertAfter = function (targetNode ,afterNode) {
var beforeNode = afterNode.nextElementSibling;
if(beforeNode == null){
this.appendChild(targetNode); // 如果beforeNode是null直接appentChild
}else{
this.insertBefore(targetNode, beforeNode); // 如果不是null是第一种情况
}
}
var div = document.getElementsByTagName('div')[0];
var p = document.createElement('p');
var b = document.getElementsByTagName('b')[0];
var span = document.getElementsByTagName('span')[0];
// div.insertAfter(p, b);
div.insertAfter(p, span);
/*
<div>
<i></i>
<b></b>
<span></span>
<p></p>
</div>
*/
</script>要学会在原型链上编程,在原型链上编程最好的一点是,this可以指代任何一个想调用的对象,如果不用this用function封装,this要变成一种参数被传进来,再有可以实现继承,下面的都可以用一劳永逸。
3、将目标节点内部的节点顺序,逆序
<div> <i></i> <b></b> <span></span> </div> <script> /* <div> <i></i> <b></b> <span></span> </div> 怎么逆序逆序? 01/ 先把b标签剪切到下面 <div> <i></i> <span></span> <b></b> </div> 02/ 再把i标签剪切到最下面来,就完成逆序了。怎么实现剪切?用appendChild()方法 <div> <span></span> <b></b> <i></i> </div> ----------------------------------------- 第一次先操作倒数第二个,第二次操作倒数第三个 <div> <i></i> <span></span> <b></b> </div> 第一次操作倒数第二个把b放到最下面了,这个i还是倒数第三个 <div> <i></i> <span></span> <b></b> </div> 再操作倒数第三个i,放到最下面就ok <div> <span></span> <b></b> <i></i> </div> 写一个for循环转一圈,查好倒数第几个 */
