1、封装函数,返回元素e的第n层祖先元素节点
重点代码:
<div>
<strong>
<span>
<i></i>
</span>
</strong>
</div>
<script type="text/javascript">
function retParent(elem,n){
while(elem && n){
elem = elem.parentElement;
n --;
}
return elem;
}
var i = document.getElementsByTagName('i')[0];
</script>
运行结果:
2、封装函数,返回元素e的第n个兄弟元素节点,n为正,返回后面的兄弟元素节点,n为负,返回前面的,n为0,返回自己。
<div>
<span></span>
<p></p>
<strong></strong>
<!-- 哈哈哈 -->
<i></i>
<address></address>
</div>
<script type="text/javascript">
function retSibling(e,n){
while(e && n){
if(n > 0){
// e = e.nextElementSibling;
// 为了保证Ie9以下无法使用nextElementSibling问题,进行优化
if(0 && e.nextSibling){
e = e.nextElementSibling; //可以使用nextElementSibling
}else{
for(e = e.nextSibling; e && e.nodeType !=1; e = e.nextSibling); //不断的nodeType判断是什么类型,直到下一个是元素节点类型
}
n --;
}else{
if(e.previousElementSibling){
e = e.previousElementSibling;
}else{
for(e = e.previousElementSibling; e && e.nodeType != 1; e = e.previousElementSibling)
}
n ++;
}
}
return e;
}
var strong = document.getElementsByTagName('strong')[0];
</script>
运行结果:
3、编辑函数,封装myChildren功能,解决以前部分浏览器的兼容性问题
<div>
<b></b>
abc
<strong>
<span>
<i></i>
</span>
</strong>
</div>
<script type="text/javascript">
Element.prototype.myChildren = function(){
var child = this.childNodes;
var len = child.length;
var arr = [];
for(var i = 0; i < len; i ++){
if(child[i].nodeType == 1){
arr.push(child[i]);
}
}
return arr;
}
var div = document.getElementsByTagName('div')[0];
</script>
运行结果:
4、自己封装hasChildren()方法,不可以用children属性:
<div>
<strong>
<span>
<i></i>
</span>
</strong>
</div>
<script type="text/javascript">
Element.prototype.myChildren = function(){
var child = this.childNodes;
var len = child.length;
var arr = [];
for(var i = 0; i < len; i ++){
if(child[i].nodeType == 1){
return true;
}
}
return false;
}
var div = document.getElementsByTagName('div')[0];
</script>
5、封装函数insertAfter();功能类似insertBefore();
// 提示:可忽略老版本浏览器,直接在Element.prototype上编程,因为在原型链上编程this可以指代任何你想调用的对象。
// 思路:将一个数插入到另一个数后面,可以转换为将这个数插入到那个数后面的数的前面,如果插入的位置是最后一位则用appendChild判断一下
<div>
<i></i>
<b></b>
<span></span>
</div>
<script type="text/javascript">
Element.prototype.insertAfter = function(targetNode,afterNode){
var beforeNode = afterNode.nextElementSibling;
if(beforeNode == null){
this.appendChild(targetNode); //插入位置是最后一位用appendChild
}else{
this.insertBefore(targetNode,beforeNode);
}
}
var div = document.getElementsByTagName('div')[0];
var b = document.getElementsByTagName('b')[0];
var span = document.getElementsByTagName('span')[0];
var p = document.createElement('p');
</script>